Merge pull request #696 from matrix-org/dbkr/ban_becomes_unban

Make ban either ban or unban
pull/21833/head
David Baker 2017-02-14 18:00:15 +00:00 committed by GitHub
commit 1e1ae5c950
1 changed files with 29 additions and 17 deletions

View File

@ -247,19 +247,27 @@ module.exports = WithMatrixClient(React.createClass({
}); });
}, },
onBan: function() { onBanOrUnban: function() {
const ConfirmUserActionDialog = sdk.getComponent("dialogs.ConfirmUserActionDialog"); const ConfirmUserActionDialog = sdk.getComponent("dialogs.ConfirmUserActionDialog");
Modal.createDialog(ConfirmUserActionDialog, { Modal.createDialog(ConfirmUserActionDialog, {
member: this.props.member, member: this.props.member,
action: 'Ban', action: this.props.member.membership == 'ban' ? 'Unban' : 'Ban',
danger: true, danger: this.props.member.membership != 'ban',
onFinished: (proceed) => { onFinished: (proceed) => {
if (!proceed) return; if (!proceed) return;
this.setState({ updating: this.state.updating + 1 }); this.setState({ updating: this.state.updating + 1 });
this.props.matrixClient.ban( let promise;
this.props.member.roomId, this.props.member.userId, if (this.props.member.membership == 'ban') {
).then( promise = this.props.matrixClient.unban(
this.props.member.roomId, this.props.member.userId,
);
} else {
promise = this.props.matrixClient.ban(
this.props.member.roomId, this.props.member.userId,
);
}
promise.then(
function() { function() {
// NO-OP; rely on the m.room.member event coming down else we could // NO-OP; rely on the m.room.member event coming down else we could
// get out of sync if we force setState here! // get out of sync if we force setState here!
@ -451,26 +459,26 @@ module.exports = WithMatrixClient(React.createClass({
}, },
_calculateOpsPermissions: function(member) { _calculateOpsPermissions: function(member) {
var defaultPerms = { const defaultPerms = {
can: {}, can: {},
muted: false, muted: false,
modifyLevel: false modifyLevel: false
}; };
var room = this.props.matrixClient.getRoom(member.roomId); const room = this.props.matrixClient.getRoom(member.roomId);
if (!room) { if (!room) {
return defaultPerms; return defaultPerms;
} }
var powerLevels = room.currentState.getStateEvents( const powerLevels = room.currentState.getStateEvents(
"m.room.power_levels", "" "m.room.power_levels", ""
); );
if (!powerLevels) { if (!powerLevels) {
return defaultPerms; return defaultPerms;
} }
var me = room.getMember(this.props.matrixClient.credentials.userId); const me = room.getMember(this.props.matrixClient.credentials.userId);
if (!me) { if (!me) {
return defaultPerms; return defaultPerms;
} }
var them = member; const them = member;
return { return {
can: this._calculateCanPermissions( can: this._calculateCanPermissions(
me, them, powerLevels.getContent() me, them, powerLevels.getContent()
@ -481,22 +489,22 @@ module.exports = WithMatrixClient(React.createClass({
}, },
_calculateCanPermissions: function(me, them, powerLevels) { _calculateCanPermissions: function(me, them, powerLevels) {
var can = { const can = {
kick: false, kick: false,
ban: false, ban: false,
mute: false, mute: false,
modifyLevel: false modifyLevel: false
}; };
var canAffectUser = them.powerLevel < me.powerLevel; const canAffectUser = them.powerLevel < me.powerLevel;
if (!canAffectUser) { if (!canAffectUser) {
//console.log("Cannot affect user: %s >= %s", them.powerLevel, me.powerLevel); //console.log("Cannot affect user: %s >= %s", them.powerLevel, me.powerLevel);
return can; return can;
} }
var editPowerLevel = ( const editPowerLevel = (
(powerLevels.events ? powerLevels.events["m.room.power_levels"] : null) || (powerLevels.events ? powerLevels.events["m.room.power_levels"] : null) ||
powerLevels.state_default powerLevels.state_default
); );
var levelToSend = ( const levelToSend = (
(powerLevels.events ? powerLevels.events["m.room.message"] : null) || (powerLevels.events ? powerLevels.events["m.room.message"] : null) ||
powerLevels.events_default powerLevels.events_default
); );
@ -643,10 +651,14 @@ module.exports = WithMatrixClient(React.createClass({
); );
} }
if (this.state.can.ban) { if (this.state.can.ban) {
let label = 'Ban';
if (this.props.member.membership == 'ban') {
label = 'Unban';
}
banButton = ( banButton = (
<AccessibleButton className="mx_MemberInfo_field" <AccessibleButton className="mx_MemberInfo_field"
onClick={this.onBan}> onClick={this.onBanOrUnban}>
Ban {label}
</AccessibleButton> </AccessibleButton>
); );
} }