| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 | // @flow
import { PureComponent } from 'react';
export type Props = {
    /**
     * The messages array to render.
     */
    messages: Array<Object>
}
/**
 * Abstract component to display a list of chat messages, grouped by sender.
 *
 * @extends PureComponent
 */
export default class AbstractMessageContainer<P: Props> extends PureComponent<P> {
    static defaultProps = {
        messages: []
    };
    /**
     * Iterates over all the messages and creates nested arrays which hold
     * consecutive messages sent by the same participant.
     *
     * @private
     * @returns {Array<Array<Object>>}
     */
    _getMessagesGroupedBySender() {
        const messagesCount = this.props.messages.length;
        const groups = [];
        let currentGrouping = [];
        let currentGroupParticipantId;
        for (let i = 0; i < messagesCount; i++) {
            const message = this.props.messages[i];
            if (message.id === currentGroupParticipantId) {
                currentGrouping.push(message);
            } else {
                currentGrouping.length && groups.push(currentGrouping);
                currentGrouping = [ message ];
                currentGroupParticipantId = message.id;
            }
        }
        currentGrouping.length && groups.push(currentGrouping);
        return groups;
    }
}
 |