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
pull/21833/head
Travis Ralston 2019-09-03 08:36:24 -06:00
parent 917700a1fc
commit 2e3e2ec420
1 changed files with 33 additions and 3 deletions

View File

@ -151,6 +151,22 @@ export default class RolesRoomSettingsTab extends React.Component {
client.sendStateEvent(this.props.roomId, "m.room.power_levels", plContent); 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() { render() {
const PowerSelector = sdk.getComponent('elements.PowerSelector'); const PowerSelector = sdk.getComponent('elements.PowerSelector');
@ -220,15 +236,29 @@ export default class RolesRoomSettingsTab extends React.Component {
const privilegedUsers = []; const privilegedUsers = [];
const mutedUsers = []; const mutedUsers = [];
Object.keys(userLevels).forEach(function(user) { Object.keys(userLevels).forEach((user) => {
const canChange = userLevels[user] < currentUserLevel && canChangeLevels; const canChange = userLevels[user] < currentUserLevel && canChangeLevels;
if (userLevels[user] > defaultUserLevel) { // privileged if (userLevels[user] > defaultUserLevel) { // privileged
privilegedUsers.push( privilegedUsers.push(
<PowerSelector value={userLevels[user]} disabled={!canChange} label={user} key={user} />, <PowerSelector
value={userLevels[user]}
disabled={!canChange}
label={user}
key={user}
powerLevelKey={user} // Will be sent as the second parameter to `onChange`
onChange={this._onUserPowerLevelChanged}
/>,
); );
} else if (userLevels[user] < defaultUserLevel) { // muted } else if (userLevels[user] < defaultUserLevel) { // muted
mutedUsers.push( mutedUsers.push(
<PowerSelector value={userLevels[user]} disabled={!canChange} label={user} key={user} />, <PowerSelector
value={userLevels[user]}
disabled={!canChange}
label={user}
key={user}
powerLevelKey={user} // Will be sent as the second parameter to `onChange`
onChange={this._onUserPowerLevelChanged}
/>,
); );
} }
}); });