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;
- }
- }
|