Use EntityTile for 3PID entities rather than munging MemberTile

pull/21833/head
Kegan Dougal 2016-01-18 16:55:51 +00:00
parent c758c0f84f
commit 165adde0c8
2 changed files with 19 additions and 36 deletions

View File

@ -285,6 +285,8 @@ module.exports = React.createClass({
// we shouldn't add them if the 3pid invite state key (token) is in the // we shouldn't add them if the 3pid invite state key (token) is in the
// member invite (content.third_party_invite.signed.token) // member invite (content.third_party_invite.signed.token)
var room = MatrixClientPeg.get().getRoom(this.props.roomId); var room = MatrixClientPeg.get().getRoom(this.props.roomId);
var EntityTile = sdk.getComponent("rooms.EntityTile");
var BaseAvatar = sdk.getComponent("avatars.BaseAvatar");
if (room) { if (room) {
room.currentState.getStateEvents("m.room.third_party_invite").forEach( room.currentState.getStateEvents("m.room.third_party_invite").forEach(
function(e) { function(e) {
@ -294,9 +296,12 @@ module.exports = React.createClass({
if (memberEvent) { if (memberEvent) {
return; return;
} }
var avatarJsx = (
<BaseAvatar name={e.getContent().display_name} width={36} height={36} />
);
memberList.push( memberList.push(
<MemberTile key={e.getStateKey()} ref={e.getStateKey()} <EntityTile key={e.getStateKey()} ref={e.getStateKey()}
customDisplayName={e.getContent().display_name} /> name={e.getContent().display_name} avatarJsx={avatarJsx} />
) )
}) })
} }

View File

@ -27,8 +27,7 @@ module.exports = React.createClass({
displayName: 'MemberTile', displayName: 'MemberTile',
propTypes: { propTypes: {
member: React.PropTypes.any, // RoomMember member: React.PropTypes.any.isRequired, // RoomMember
customDisplayName: React.PropTypes.string, // for 3pid invites
}, },
getInitialState: function() { getInitialState: function() {
@ -36,7 +35,6 @@ module.exports = React.createClass({
}, },
shouldComponentUpdate: function(nextProps, nextState) { shouldComponentUpdate: function(nextProps, nextState) {
if (!this.props.member) { return false; } // e.g. 3pid members
if ( if (
this.member_last_modified_time === undefined || this.member_last_modified_time === undefined ||
this.member_last_modified_time < nextProps.member.getLastModifiedTime() this.member_last_modified_time < nextProps.member.getLastModifiedTime()
@ -54,8 +52,6 @@ module.exports = React.createClass({
}, },
onClick: function(e) { onClick: function(e) {
if (!this.props.member) { return; } // e.g. 3pid members
dis.dispatch({ dis.dispatch({
action: 'view_user', action: 'view_user',
member: this.props.member, member: this.props.member,
@ -63,21 +59,11 @@ module.exports = React.createClass({
}, },
_getDisplayName: function() { _getDisplayName: function() {
if (this.props.customDisplayName) {
return this.props.customDisplayName;
}
return this.props.member.name; return this.props.member.name;
}, },
getPowerLabel: function() { getPowerLabel: function() {
if (!this.props.member) { return this.props.member.userId;
return this._getDisplayName();
}
var label = this.props.member.userId;
if (this.state.isTargetMod) {
label += " - Mod (" + this.props.member.powerLevelNorm + "%)";
}
return label;
}, },
render: function() { render: function() {
@ -88,29 +74,21 @@ module.exports = React.createClass({
var member = this.props.member; var member = this.props.member;
var name = this._getDisplayName(); var name = this._getDisplayName();
var active = -1; var active = -1;
var presenceState = (member && member.user) ? member.user.presence : null; var presenceState = member.user ? member.user.presence : null;
var av; var av = (
if (member) { <MemberAvatar member={member} width={36} height={36} />
av = ( );
<MemberAvatar member={member} width={36} height={36} />
);
if (member.user) { if (member.user) {
this.user_last_modified_time = member.user.getLastModifiedTime(); this.user_last_modified_time = member.user.getLastModifiedTime();
// FIXME: make presence data update whenever User.presence changes... // FIXME: make presence data update whenever User.presence changes...
active = ( active = (
(Date.now() - (member.user.lastPresenceTs - member.user.lastActiveAgo)) || -1 (Date.now() - (member.user.lastPresenceTs - member.user.lastActiveAgo)) || -1
);
}
this.member_last_modified_time = member.getLastModifiedTime();
}
else {
av = (
<BaseAvatar name={name} width={36} height={36} />
); );
} }
this.member_last_modified_time = member.getLastModifiedTime();
return ( return (
<EntityTile {...this.props} presenceActiveAgo={active} presenceState={presenceState} <EntityTile {...this.props} presenceActiveAgo={active} presenceState={presenceState}