|
@@ -1,27 +1,18 @@
|
1
|
1
|
// @flow
|
2
|
2
|
|
3
|
|
-import React, { PureComponent } from 'react';
|
|
3
|
+import React from 'react';
|
4
|
4
|
|
5
|
|
-import ChatMessageGroup from './ChatMessageGroup';
|
6
|
|
-
|
7
|
|
-type Props = {
|
|
5
|
+import AbstractMessageContainer, { type Props }
|
|
6
|
+ from '../AbstractMessageContainer';
|
8
|
7
|
|
9
|
|
- /**
|
10
|
|
- * The messages array to render.
|
11
|
|
- */
|
12
|
|
- messages: Array<Object>
|
13
|
|
-}
|
|
8
|
+import ChatMessageGroup from './ChatMessageGroup';
|
14
|
9
|
|
15
|
10
|
/**
|
16
|
11
|
* Displays all received chat messages, grouped by sender.
|
17
|
12
|
*
|
18
|
|
- * @extends PureComponent
|
|
13
|
+ * @extends AbstractMessageContainer
|
19
|
14
|
*/
|
20
|
|
-export default class MessageContainer extends PureComponent<Props> {
|
21
|
|
- static defaultProps = {
|
22
|
|
- messages: []
|
23
|
|
- };
|
24
|
|
-
|
|
15
|
+export default class MessageContainer extends AbstractMessageContainer<Props> {
|
25
|
16
|
/**
|
26
|
17
|
* Reference to the HTML element at the end of the list of displayed chat
|
27
|
18
|
* messages. Used for scrolling to the end of the chat messages.
|
|
@@ -84,36 +75,7 @@ export default class MessageContainer extends PureComponent<Props> {
|
84
|
75
|
);
|
85
|
76
|
}
|
86
|
77
|
|
87
|
|
- /**
|
88
|
|
- * Iterates over all the messages and creates nested arrays which hold
|
89
|
|
- * consecutive messages sent by the same participant.
|
90
|
|
- *
|
91
|
|
- * @private
|
92
|
|
- * @returns {Array<Array<Object>>}
|
93
|
|
- */
|
94
|
|
- _getMessagesGroupedBySender() {
|
95
|
|
- const messagesCount = this.props.messages.length;
|
96
|
|
- const groups = [];
|
97
|
|
- let currentGrouping = [];
|
98
|
|
- let currentGroupParticipantId;
|
99
|
|
-
|
100
|
|
- for (let i = 0; i < messagesCount; i++) {
|
101
|
|
- const message = this.props.messages[i];
|
102
|
|
-
|
103
|
|
- if (message.id === currentGroupParticipantId) {
|
104
|
|
- currentGrouping.push(message);
|
105
|
|
- } else {
|
106
|
|
- groups.push(currentGrouping);
|
107
|
|
-
|
108
|
|
- currentGrouping = [ message ];
|
109
|
|
- currentGroupParticipantId = message.id;
|
110
|
|
- }
|
111
|
|
- }
|
112
|
|
-
|
113
|
|
- groups.push(currentGrouping);
|
114
|
|
-
|
115
|
|
- return groups;
|
116
|
|
- }
|
|
78
|
+ _getMessagesGroupedBySender: () => Array<Array<Object>>;
|
117
|
79
|
|
118
|
80
|
/**
|
119
|
81
|
* Automatically scrolls the displayed chat messages down to the latest.
|