Просмотр исходного кода

ref(chat): on native, group messages by sender (no styling)

master
Leonard Kim 6 лет назад
Родитель
Сommit
34dffbfc5e

+ 76
- 0
react/features/chat/components/native/ChatMessageGroup.js Просмотреть файл

@@ -0,0 +1,76 @@
1
+// @flow
2
+
3
+import React, { Component } from 'react';
4
+import { FlatList } from 'react-native';
5
+
6
+import ChatMessage from './ChatMessage';
7
+import styles from './styles';
8
+
9
+type Props = {
10
+
11
+  /**
12
+   * The messages array to render.
13
+   */
14
+  messages: Array<Object>
15
+}
16
+
17
+/**
18
+ * Implements a container to render all the chat messages in a conference.
19
+ */
20
+export default class ChatMessageGroup extends Component<Props> {
21
+    /**
22
+     * Instantiates a new instance of the component.
23
+     *
24
+     * @inheritdoc
25
+     */
26
+    constructor(props: Props) {
27
+        super(props);
28
+
29
+        this._keyExtractor = this._keyExtractor.bind(this);
30
+        this._renderMessage = this._renderMessage.bind(this);
31
+    }
32
+
33
+    /**
34
+     * Implements {@code Component#render}.
35
+     *
36
+     * @inheritdoc
37
+     */
38
+    render() {
39
+        return (
40
+            <FlatList
41
+                data = { this.props.messages }
42
+                inverted = { true }
43
+                keyExtractor = { this._keyExtractor }
44
+                renderItem = { this._renderMessage }
45
+                style = { styles.messageContainer } />
46
+        );
47
+    }
48
+
49
+    _keyExtractor: Object => string
50
+
51
+    /**
52
+     * Key extractor for the flatlist.
53
+     *
54
+     * @param {Object} item - The flatlist item that we need the key to be
55
+     * generated for.
56
+     * @param {number} index - The index of the element.
57
+     * @returns {string}
58
+     */
59
+    _keyExtractor(item, index) {
60
+        return `key_${index}`;
61
+    }
62
+
63
+    _renderMessage: Object => React$Element<*>;
64
+
65
+    /**
66
+     * Renders a single chat message.
67
+     *
68
+     * @param {Object} message - The chat message to render.
69
+     * @returns {React$Element<*>}
70
+     */
71
+    _renderMessage({ item: message }) {
72
+        return (
73
+            <ChatMessage message = { message } />
74
+        );
75
+    }
76
+}

+ 10
- 10
react/features/chat/components/native/MessageContainer.js Просмотреть файл

@@ -6,7 +6,7 @@ import { FlatList } from 'react-native';
6 6
 import AbstractMessageContainer, { type Props }
7 7
     from '../AbstractMessageContainer';
8 8
 
9
-import ChatMessage from './ChatMessage';
9
+import ChatMessageGroup from './ChatMessageGroup';
10 10
 import styles from './styles';
11 11
 
12 12
 /**
@@ -22,7 +22,7 @@ export default class MessageContainer extends AbstractMessageContainer<Props> {
22 22
         super(props);
23 23
 
24 24
         this._keyExtractor = this._keyExtractor.bind(this);
25
-        this._renderMessage = this._renderMessage.bind(this);
25
+        this._renderMessageGroup = this._renderMessageGroup.bind(this);
26 26
     }
27 27
 
28 28
     /**
@@ -33,14 +33,16 @@ export default class MessageContainer extends AbstractMessageContainer<Props> {
33 33
     render() {
34 34
         return (
35 35
             <FlatList
36
-                data = { this.props.messages }
36
+                data = { this._getMessagesGroupedBySender() }
37 37
                 inverted = { true }
38 38
                 keyExtractor = { this._keyExtractor }
39
-                renderItem = { this._renderMessage }
39
+                renderItem = { this._renderMessageGroup }
40 40
                 style = { styles.messageContainer } />
41 41
         );
42 42
     }
43 43
 
44
+    _getMessagesGroupedBySender: () => Array<Array<Object>>;
45
+
44 46
     _keyExtractor: Object => string
45 47
 
46 48
     /**
@@ -55,17 +57,15 @@ export default class MessageContainer extends AbstractMessageContainer<Props> {
55 57
         return `key_${index}`;
56 58
     }
57 59
 
58
-    _renderMessage: Object => React$Element<*>;
60
+    _renderMessageGroup: Object => React$Element<*>;
59 61
 
60 62
     /**
61 63
      * Renders a single chat message.
62 64
      *
63
-     * @param {Object} message - The chat message to render.
65
+     * @param {Array<Object>} messages - The chat message to render.
64 66
      * @returns {React$Element<*>}
65 67
      */
66
-    _renderMessage({ item: message }) {
67
-        return (
68
-            <ChatMessage message = { message } />
69
-        );
68
+    _renderMessageGroup({ item: messages }) {
69
+        return <ChatMessageGroup messages = { messages } />;
70 70
     }
71 71
 }

Загрузка…
Отмена
Сохранить