Skip to content
This repository has been archived by the owner on Sep 11, 2024. It is now read-only.

Commit

Permalink
Merge pull request #347 from matrix-org/matthew/fix-race-on-new-room-…
Browse files Browse the repository at this point in the history
…invitelist

Fix race when creating rooms where invite list can be blank
  • Loading branch information
dbkr authored Jul 18, 2016
2 parents 37402c0 + 0553d80 commit 2b7ade9
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 8 deletions.
35 changes: 27 additions & 8 deletions src/components/views/rooms/InviteMemberList.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,22 +37,41 @@ module.exports = React.createClass({
},

componentWillMount: function() {
this._room = MatrixClientPeg.get().getRoom(this.props.roomId);
var cli = MatrixClientPeg.get();
cli.on("RoomState.members", this.onRoomStateMember);

this._emailEntity = null;

// we have to update the list whenever membership changes
// particularly to avoid bug https://github.com/vector-im/vector-web/issues/1813
this._updateList();
},

componentDidMount: function() {
// initialise the email tile
this.onSearchQueryChanged('');
},

componentWillUnmount: function() {
var cli = MatrixClientPeg.get();
if (cli) {
cli.removeListener("RoomState.members", this.onRoomStateMember);
}
},

_updateList: function() {
this._room = MatrixClientPeg.get().getRoom(this.props.roomId);
// Load the complete user list for inviting new users
// TODO: Keep this list bleeding-edge up-to-date. Practically speaking,
// it will do for now not being updated as random new users join different
// rooms as this list will be reloaded every room swap.
if (this._room) {
this._userList = MatrixClientPeg.get().getUsers().filter((u) => {
return !this._room.hasMembershipState(u.userId, "join");
return (!this._room.hasMembershipState(u.userId, "join") &&
!this._room.hasMembershipState(u.userId, "invite"));
});
}
},

componentDidMount: function() {
// initialise the email tile
this.onSearchQueryChanged('');
onRoomStateMember: function(ev, state, member) {
this._updateList();
},

onInvite: function(ev) {
Expand Down
4 changes: 4 additions & 0 deletions src/createRoom.js
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,10 @@ function createRoom(opts) {
return client.createRoom(createOpts).finally(function() {
modal.close();
}).then(function(res) {
// NB createRoom doesn't block on the client seeing the echo that the
// room has been created, so we race here with the client knowing that
// the room exists, causing things like
// https://github.com/vector-im/vector-web/issues/1813
dis.dispatch({
action: 'view_room',
room_id: res.room_id
Expand Down

0 comments on commit 2b7ade9

Please sign in to comment.