Load limited number of room members when we first switch to a room, loading the rest a little later: makes switchign to large rooms much more responsive.

pull/1/head
David Baker 2015-06-25 14:57:35 +01:00
parent 209e052025
commit 5d44de9e08
1 changed files with 22 additions and 7 deletions

View File

@ -19,15 +19,19 @@ limitations under the License.
var React = require("react"); var React = require("react");
var MatrixClientPeg = require("../../MatrixClientPeg"); var MatrixClientPeg = require("../../MatrixClientPeg");
var INITIAL_LOAD_NUM_MEMBERS = 50;
module.exports = { module.exports = {
getInitialState: function() {
var members = this.roomMembers(INITIAL_LOAD_NUM_MEMBERS);
return {
memberDict: members
};
},
componentWillMount: function() { componentWillMount: function() {
var cli = MatrixClientPeg.get(); var cli = MatrixClientPeg.get();
cli.on("RoomState.members", this.onRoomStateMember); cli.on("RoomState.members", this.onRoomStateMember);
var members = this.roomMembers();
this.setState({
memberDict: members
});
}, },
componentWillUnmount: function() { componentWillUnmount: function() {
@ -36,6 +40,15 @@ module.exports = {
} }
}, },
componentDidMount: function() {
var that = this;
setTimeout(function() {
that.setState({
memberDict: that.roomMembers()
});
}, 50);
},
// Remember to set 'key' on a MemberList to the ID of the room it's for // Remember to set 'key' on a MemberList to the ID of the room it's for
/*componentWillReceiveProps: function(newProps) { /*componentWillReceiveProps: function(newProps) {
},*/ },*/
@ -47,17 +60,19 @@ module.exports = {
}); });
}, },
roomMembers: function() { roomMembers: function(limit) {
var cli = MatrixClientPeg.get(); var cli = MatrixClientPeg.get();
var all_members = cli.getRoom(this.props.roomId).currentState.members; var all_members = cli.getRoom(this.props.roomId).currentState.members;
var all_user_ids = Object.keys(all_members); var all_user_ids = Object.keys(all_members);
var to_display = {}; var to_display = {};
for (var i = 0; i < all_user_ids.length; ++i) { var count = 0;
for (var i = 0; i < all_user_ids.length && (limit === undefined || count < limit); ++i) {
var user_id = all_user_ids[i]; var user_id = all_user_ids[i];
var m = all_members[user_id]; var m = all_members[user_id];
if (m.membership == 'join' || m.membership == 'invite') { if (m.membership == 'join' || m.membership == 'invite') {
to_display[user_id] = m; to_display[user_id] = m;
++count;
} }
} }
return to_display; return to_display;