| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 | // @flow
import React, { Component } from 'react';
import { FlatList } from 'react-native';
import ChatMessage from './ChatMessage';
import styles from './styles';
type Props = {
  /**
   * The messages array to render.
   */
  messages: Array<Object>
}
/**
 * Implements a container to render all the chat messages in a conference.
 */
export default class ChatMessageGroup extends Component<Props> {
    /**
     * Instantiates a new instance of the component.
     *
     * @inheritdoc
     */
    constructor(props: Props) {
        super(props);
        this._keyExtractor = this._keyExtractor.bind(this);
        this._renderMessage = this._renderMessage.bind(this);
    }
    /**
     * Implements {@code Component#render}.
     *
     * @inheritdoc
     */
    render() {
        return (
            <FlatList
                data = { this.props.messages }
                inverted = { true }
                keyExtractor = { this._keyExtractor }
                renderItem = { this._renderMessage }
                style = { styles.messageContainer } />
        );
    }
    _keyExtractor: Object => string
    /**
     * Key extractor for the flatlist.
     *
     * @param {Object} item - The flatlist item that we need the key to be
     * generated for.
     * @param {number} index - The index of the element.
     * @returns {string}
     */
    _keyExtractor(item, index) {
        return `key_${index}`;
    }
    _renderMessage: Object => React$Element<*>;
    /**
     * Renders a single chat message.
     *
     * @param {Object} message - The chat message to render.
     * @returns {React$Element<*>}
     */
    _renderMessage({ index, item: message }) {
        return (
            <ChatMessage
                message = { message }
                showAvatar = {
                    this.props.messages[0].messageType !== 'local'
                        && index === this.props.messages.length - 1
                }
                showDisplayName = {
                    this.props.messages[0].messageType === 'remote'
                        && index === this.props.messages.length - 1
                }
                showTimestamp = { index === 0 } />
        );
    }
}
 |