소스 검색

ref(chat): create AbstractMessageContainer

So mobile and web can share logic for grouping chat
messages by sender.
j8
Leonard Kim 6 년 전
부모
커밋
a9637f93c3

+ 53
- 0
react/features/chat/components/AbstractMessageContainer.js 파일 보기

@@ -0,0 +1,53 @@
1
+// @flow
2
+
3
+import { PureComponent } from 'react';
4
+
5
+export type Props = {
6
+
7
+    /**
8
+     * The messages array to render.
9
+     */
10
+    messages: Array<Object>
11
+}
12
+
13
+/**
14
+ * Abstract component to display a list of chat messages, grouped by sender.
15
+ *
16
+ * @extends PureComponent
17
+ */
18
+export default class AbstractMessageContainer<P: Props> extends PureComponent<P> {
19
+    static defaultProps = {
20
+        messages: []
21
+    };
22
+
23
+    /**
24
+     * Iterates over all the messages and creates nested arrays which hold
25
+     * consecutive messages sent by the same participant.
26
+     *
27
+     * @private
28
+     * @returns {Array<Array<Object>>}
29
+     */
30
+    _getMessagesGroupedBySender() {
31
+        const messagesCount = this.props.messages.length;
32
+        const groups = [];
33
+        let currentGrouping = [];
34
+        let currentGroupParticipantId;
35
+
36
+        for (let i = 0; i < messagesCount; i++) {
37
+            const message = this.props.messages[i];
38
+
39
+            if (message.id === currentGroupParticipantId) {
40
+                currentGrouping.push(message);
41
+            } else {
42
+                groups.push(currentGrouping);
43
+
44
+                currentGrouping = [ message ];
45
+                currentGroupParticipantId = message.id;
46
+            }
47
+        }
48
+
49
+        groups.push(currentGrouping);
50
+
51
+        return groups;
52
+    }
53
+}

+ 5
- 10
react/features/chat/components/native/MessageContainer.js 파일 보기

@@ -1,23 +1,18 @@
1 1
 // @flow
2 2
 
3
-import React, { Component } from 'react';
3
+import React from 'react';
4 4
 import { FlatList } from 'react-native';
5 5
 
6
+import AbstractMessageContainer, { type Props }
7
+    from '../AbstractMessageContainer';
8
+
6 9
 import ChatMessage from './ChatMessage';
7 10
 import styles from './styles';
8 11
 
9
-type Props = {
10
-
11
-    /**
12
-     * The messages array to render.
13
-     */
14
-    messages: Array<Object>
15
-}
16
-
17 12
 /**
18 13
  * Implements a container to render all the chat messages in a conference.
19 14
  */
20
-export default class MessageContainer extends Component<Props> {
15
+export default class MessageContainer extends AbstractMessageContainer<Props> {
21 16
     /**
22 17
      * Instantiates a new instance of the component.
23 18
      *

+ 7
- 45
react/features/chat/components/web/MessageContainer.js 파일 보기

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

Loading…
취소
저장