diff --git a/src/components/views/settings/tabs/room/RolesRoomSettingsTab.js b/src/components/views/settings/tabs/room/RolesRoomSettingsTab.js index 64f3992ad0..c826f89916 100644 --- a/src/components/views/settings/tabs/room/RolesRoomSettingsTab.js +++ b/src/components/views/settings/tabs/room/RolesRoomSettingsTab.js @@ -63,13 +63,10 @@ export class BannedUser extends React.Component { member: PropTypes.object.isRequired, // js-sdk RoomMember by: PropTypes.string.isRequired, reason: PropTypes.string, - onUnbanned: PropTypes.func.isRequired, }; _onUnbanClick = (e) => { - MatrixClientPeg.get().unban(this.props.member.roomId, this.props.member.userId).then(() => { - this.props.onUnbanned(); - }).catch((err) => { + MatrixClientPeg.get().unban(this.props.member.roomId, this.props.member.userId).catch((err) => { const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog"); console.error("Failed to unban: " + err); Modal.createTrackedDialog('Failed to unban', '', ErrorDialog, { @@ -109,6 +106,22 @@ export default class RolesRoomSettingsTab extends React.Component { roomId: PropTypes.string.isRequired, }; + componentDidMount(): void { + MatrixClientPeg.get().on("RoomState.members", this._onRoomMembership.bind(this)); + } + + componentWillUnmount(): void { + const client = MatrixClientPeg.get(); + if (client) { + client.removeListener("RoomState.members", this._onRoomMembership.bind(this)); + } + } + + _onRoomMembership(event, state, member) { + if (state.roomId !== this.props.roomId) return; + this.forceUpdate(); + } + _populateDefaultPlEvents(eventsSection, stateLevel, eventsLevel) { for (const desiredEvent of Object.keys(plEventsToShow)) { if (!(desiredEvent in eventsSection)) { @@ -326,7 +339,7 @@ export default class RolesRoomSettingsTab extends React.Component { return ( + by={bannedBy} /> ); })}