Fix not showing Invited section if all invites are 3PID

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
pull/21833/head
Michael Telatynski 2018-01-25 12:18:02 +00:00
parent ebfdd7c718
commit 56bd4b7d06
1 changed files with 30 additions and 26 deletions

View File

@ -315,6 +315,30 @@ module.exports = React.createClass({
}); });
}, },
_getPending3PidInvites: function() {
// include 3pid invites (m.room.third_party_invite) state events.
// The HS may have already converted these into m.room.member invites so
// we shouldn't add them if the 3pid invite state key (token) is in the
// member invite (content.third_party_invite.signed.token)
const room = MatrixClientPeg.get().getRoom(this.props.roomId);
if (room) {
return room.currentState.getStateEvents("m.room.third_party_invite").filter(function(e) {
// any events without these keys are not valid 3pid invites, so we ignore them
const requiredKeys = ['key_validity_url', 'public_key', 'display_name'];
for (let i = 0; i < requiredKeys.length; ++i) {
if (e.getContent()[requiredKeys[i]] === undefined) return false;
}
// discard all invites which have a m.room.member event since we've
// already added them.
const memberEvent = room.currentState.getInviteForThreePidToken(e.getStateKey());
if (memberEvent) return false;
return true;
});
}
},
_makeMemberTiles: function(members, membership) { _makeMemberTiles: function(members, membership) {
const MemberTile = sdk.getComponent("rooms.MemberTile"); const MemberTile = sdk.getComponent("rooms.MemberTile");
@ -329,33 +353,13 @@ module.exports = React.createClass({
// Double XXX: Now it's really, really not the right home for this logic: // Double XXX: Now it's really, really not the right home for this logic:
// we shouldn't even be passing in the 'membership' param to this function. // we shouldn't even be passing in the 'membership' param to this function.
// Ew, ew, and ew. // Ew, ew, and ew.
// Triple XXX: This violates the size constraint, the output is expected/desired
// to be the same length as the members input array.
if (membership === "invite") { if (membership === "invite") {
// include 3pid invites (m.room.third_party_invite) state events.
// The HS may have already converted these into m.room.member invites so
// we shouldn't add them if the 3pid invite state key (token) is in the
// member invite (content.third_party_invite.signed.token)
const room = MatrixClientPeg.get().getRoom(this.props.roomId);
const EntityTile = sdk.getComponent("rooms.EntityTile"); const EntityTile = sdk.getComponent("rooms.EntityTile");
if (room) { memberList.push(...this._getPending3PidInvites().map((e) => {
room.currentState.getStateEvents("m.room.third_party_invite").forEach( return <EntityTile key={e.getStateKey()} name={e.getContent().display_name} suppressOnHover={true} />;
function(e) { }));
// any events without these keys are not valid 3pid invites, so we ignore them
const required_keys = ['key_validity_url', 'public_key', 'display_name'];
for (let i = 0; i < required_keys.length; ++i) {
if (e.getContent()[required_keys[i]] === undefined) return;
}
// discard all invites which have a m.room.member event since we've
// already added them.
const memberEvent = room.currentState.getInviteForThreePidToken(e.getStateKey());
if (memberEvent) {
return;
}
memberList.push(
<EntityTile key={e.getStateKey()} name={e.getContent().display_name} suppressOnHover={true} />,
);
});
}
} }
return memberList; return memberList;
@ -374,7 +378,7 @@ module.exports = React.createClass({
}, },
_getChildCountInvited: function() { _getChildCountInvited: function() {
return this.state.filteredInvitedMembers.length; return this.state.filteredInvitedMembers.length + (this._getPending3PidInvites() || []).length;
}, },
render: function() { render: function() {