From 11efb1ede459a0ec9d5535bbc4d79392e338659e Mon Sep 17 00:00:00 2001 From: Kegan Dougal <kegan@matrix.org> Date: Thu, 26 Nov 2015 17:49:39 +0000 Subject: [PATCH] Move and merge MemberInfo --- .../views/rooms}/MemberInfo.js | 86 +++++++++++++++++-- 1 file changed, 79 insertions(+), 7 deletions(-) rename src/{controllers/molecules => components/views/rooms}/MemberInfo.js (78%) diff --git a/src/controllers/molecules/MemberInfo.js b/src/components/views/rooms/MemberInfo.js similarity index 78% rename from src/controllers/molecules/MemberInfo.js rename to src/components/views/rooms/MemberInfo.js index 913e36a4ce..02dea43aa7 100644 --- a/src/controllers/molecules/MemberInfo.js +++ b/src/components/views/rooms/MemberInfo.js @@ -25,13 +25,15 @@ limitations under the License. * 'muted': boolean, * 'isTargetMod': boolean */ +var React = require('react'); +var MatrixClientPeg = require("../../../MatrixClientPeg"); +var dis = require("../../../dispatcher"); +var Modal = require("../../../Modal"); +var sdk = require('../../../index'); -var MatrixClientPeg = require("../../MatrixClientPeg"); -var dis = require("../../dispatcher"); -var Modal = require("../../Modal"); -var sdk = require('../../index'); +module.exports = React.createClass({ + displayName: 'MemberInfo', -module.exports = { componentDidMount: function() { // work out the current state if (this.props.member) { @@ -320,6 +322,76 @@ module.exports = { powerLevelContent.events_default ); return member.powerLevel < levelToSend; - } -}; + }, + + onCancel: function(e) { + dis.dispatch({ + action: "view_user", + member: null + }); + }, + + render: function() { + var interactButton, kickButton, banButton, muteButton, giveModButton, spinner; + if (this.props.member.userId === MatrixClientPeg.get().credentials.userId) { + interactButton = <div className="mx_MemberInfo_field" onClick={this.onLeaveClick}>Leave room</div>; + } + else { + interactButton = <div className="mx_MemberInfo_field" onClick={this.onChatClick}>Start chat</div>; + } + + if (this.state.creatingRoom) { + var Loader = sdk.getComponent("elements.Spinner"); + spinner = <Loader imgClassName="mx_ContextualMenu_spinner"/>; + } + + if (this.state.can.kick) { + kickButton = <div className="mx_MemberInfo_field" onClick={this.onKick}> + Kick + </div>; + } + if (this.state.can.ban) { + banButton = <div className="mx_MemberInfo_field" onClick={this.onBan}> + Ban + </div>; + } + if (this.state.can.mute) { + var muteLabel = this.state.muted ? "Unmute" : "Mute"; + muteButton = <div className="mx_MemberInfo_field" onClick={this.onMuteToggle}> + {muteLabel} + </div>; + } + if (this.state.can.modifyLevel) { + var giveOpLabel = this.state.isTargetMod ? "Revoke Mod" : "Make Mod"; + giveModButton = <div className="mx_MemberInfo_field" onClick={this.onModToggle}> + {giveOpLabel} + </div> + } + + var MemberAvatar = sdk.getComponent('avatars.MemberAvatar'); + return ( + <div className="mx_MemberInfo"> + <img className="mx_MemberInfo_cancel" src="img/cancel-black.png" width="18" height="18" onClick={this.onCancel}/> + <div className="mx_MemberInfo_avatar"> + <MemberAvatar member={this.props.member} width={48} height={48} /> + </div> + <h2>{ this.props.member.name }</h2> + <div className="mx_MemberInfo_profileField"> + { this.props.member.userId } + </div> + <div className="mx_MemberInfo_profileField"> + power: { this.props.member.powerLevelNorm }% + </div> + <div className="mx_MemberInfo_buttons"> + {interactButton} + {muteButton} + {kickButton} + {banButton} + {giveModButton} + {spinner} + </div> + </div> + ); + } +});