From 2e3e2ec420d73c45a832a6ce1da78bb68a0d5a69 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Tue, 3 Sep 2019 08:36:24 -0600 Subject: [PATCH 1/2] Fix member power levels in room settings Fixes https://github.com/vector-im/riot-web/issues/10736 We didn't have an onChange property on the PowerSelector component --- .../tabs/room/RolesRoomSettingsTab.js | 36 +++++++++++++++++-- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/src/components/views/settings/tabs/room/RolesRoomSettingsTab.js b/src/components/views/settings/tabs/room/RolesRoomSettingsTab.js index 6b5fded674..f76bd6efa2 100644 --- a/src/components/views/settings/tabs/room/RolesRoomSettingsTab.js +++ b/src/components/views/settings/tabs/room/RolesRoomSettingsTab.js @@ -151,6 +151,22 @@ export default class RolesRoomSettingsTab extends React.Component { client.sendStateEvent(this.props.roomId, "m.room.power_levels", plContent); }; + _onUserPowerLevelChanged = (value, powerLevelKey) => { + const client = MatrixClientPeg.get(); + const room = client.getRoom(this.props.roomId); + const plEvent = room.currentState.getStateEvents('m.room.power_levels', ''); + let plContent = plEvent ? (plEvent.getContent() || {}) : {}; + + // Clone the power levels just in case + plContent = Object.assign({}, plContent); + + // powerLevelKey should be a user ID + if (!plContent['users']) plContent['users'] = {}; + plContent['users'][powerLevelKey] = value; + + client.sendStateEvent(this.props.roomId, "m.room.power_levels", plContent); + }; + render() { const PowerSelector = sdk.getComponent('elements.PowerSelector'); @@ -220,15 +236,29 @@ export default class RolesRoomSettingsTab extends React.Component { const privilegedUsers = []; const mutedUsers = []; - Object.keys(userLevels).forEach(function(user) { + Object.keys(userLevels).forEach((user) => { const canChange = userLevels[user] < currentUserLevel && canChangeLevels; if (userLevels[user] > defaultUserLevel) { // privileged privilegedUsers.push( - , + , ); } else if (userLevels[user] < defaultUserLevel) { // muted mutedUsers.push( - , + , ); } }); From d6adf0fd6db41845ee548b137ce4fde3a0b1cdd3 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Wed, 4 Sep 2019 11:24:31 -0600 Subject: [PATCH 2/2] Add responsible error handling because we're responsible people --- .../settings/tabs/room/RolesRoomSettingsTab.js | 13 ++++++++++++- src/i18n/strings/en_EN.json | 2 ++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/components/views/settings/tabs/room/RolesRoomSettingsTab.js b/src/components/views/settings/tabs/room/RolesRoomSettingsTab.js index f76bd6efa2..002748694c 100644 --- a/src/components/views/settings/tabs/room/RolesRoomSettingsTab.js +++ b/src/components/views/settings/tabs/room/RolesRoomSettingsTab.js @@ -164,7 +164,18 @@ export default class RolesRoomSettingsTab extends React.Component { if (!plContent['users']) plContent['users'] = {}; plContent['users'][powerLevelKey] = value; - client.sendStateEvent(this.props.roomId, "m.room.power_levels", plContent); + client.sendStateEvent(this.props.roomId, "m.room.power_levels", plContent).catch(e => { + console.error(e); + + const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog"); + Modal.createTrackedDialog('Power level change failed', '', ErrorDialog, { + title: _t('Error changing power level'), + description: _t( + "An error occurred changing the user's power level. Ensure you have sufficient " + + "permissions and try again.", + ), + }); + }); }; render() { diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 2498b018e3..03e586c4e4 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -689,6 +689,8 @@ "Failed to unban": "Failed to unban", "Unban": "Unban", "Banned by %(displayName)s": "Banned by %(displayName)s", + "Error changing power level": "Error changing power level", + "An error occurred changing the user's power level. Ensure you have sufficient permissions and try again.": "An error occurred changing the user's power level. Ensure you have sufficient permissions and try again.", "Default role": "Default role", "Send messages": "Send messages", "Invite users": "Invite users",