瀏覽代碼

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

master
Leonard Kim 6 年之前
父節點
當前提交
34dffbfc5e

+ 76
- 0
react/features/chat/components/native/ChatMessageGroup.js 查看文件

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
 import AbstractMessageContainer, { type Props }
6
 import AbstractMessageContainer, { type Props }
7
     from '../AbstractMessageContainer';
7
     from '../AbstractMessageContainer';
8
 
8
 
9
-import ChatMessage from './ChatMessage';
9
+import ChatMessageGroup from './ChatMessageGroup';
10
 import styles from './styles';
10
 import styles from './styles';
11
 
11
 
12
 /**
12
 /**
22
         super(props);
22
         super(props);
23
 
23
 
24
         this._keyExtractor = this._keyExtractor.bind(this);
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
     render() {
33
     render() {
34
         return (
34
         return (
35
             <FlatList
35
             <FlatList
36
-                data = { this.props.messages }
36
+                data = { this._getMessagesGroupedBySender() }
37
                 inverted = { true }
37
                 inverted = { true }
38
                 keyExtractor = { this._keyExtractor }
38
                 keyExtractor = { this._keyExtractor }
39
-                renderItem = { this._renderMessage }
39
+                renderItem = { this._renderMessageGroup }
40
                 style = { styles.messageContainer } />
40
                 style = { styles.messageContainer } />
41
         );
41
         );
42
     }
42
     }
43
 
43
 
44
+    _getMessagesGroupedBySender: () => Array<Array<Object>>;
45
+
44
     _keyExtractor: Object => string
46
     _keyExtractor: Object => string
45
 
47
 
46
     /**
48
     /**
55
         return `key_${index}`;
57
         return `key_${index}`;
56
     }
58
     }
57
 
59
 
58
-    _renderMessage: Object => React$Element<*>;
60
+    _renderMessageGroup: Object => React$Element<*>;
59
 
61
 
60
     /**
62
     /**
61
      * Renders a single chat message.
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
      * @returns {React$Element<*>}
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
 }

Loading…
取消
儲存