Skip to content
This repository has been archived by the owner on Sep 11, 2024. It is now read-only.

Commit

Permalink
Merge pull request #9452 from Arnei/last-admin-leave-room-warning
Browse files Browse the repository at this point in the history
Add leave room warning for last admin
  • Loading branch information
dbkr committed Mar 22, 2024
2 parents 56d7911 + 1a1699d commit 03dc48b
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 0 deletions.
30 changes: 30 additions & 0 deletions src/components/structures/MatrixChat.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -1198,6 +1198,35 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
);
}
}

const client = MatrixClientPeg.get();
if (client && roomToLeave) {
const plEvent = roomToLeave.currentState.getStateEvents(EventType.RoomPowerLevels, "");
const plContent = plEvent ? plEvent.getContent() : {};
const userLevels = plContent.users || {};
const currentUserLevel = userLevels[client.getUserId()!];
const userLevelValues = Object.values(userLevels);
if (userLevelValues.every((x) => typeof x === "number")) {
const maxUserLevel = Math.max(...(userLevelValues as number[]));
// If the user is the only user with highest power level
if (
maxUserLevel === currentUserLevel &&
userLevelValues.lastIndexOf(maxUserLevel) == userLevelValues.indexOf(maxUserLevel)
) {
const warning =
maxUserLevel >= 100
? _t("leave_room_dialog|room_leave_admin_warning")
: _t("leave_room_dialog|room_leave_mod_warning");
warnings.push(
<strong className="warning" key="last_admin_warning">
{" " /* Whitespace, otherwise the sentences get smashed together */}
{warning}
</strong>,
);
}
}
}

return warnings;
}

Expand All @@ -1222,6 +1251,7 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
</span>
),
button: _t("action|leave"),
danger: warnings.length > 0,
onFinished: async (shouldLeave) => {
if (shouldLeave) {
await leaveRoomBehaviour(cli, roomId);
Expand Down
2 changes: 2 additions & 0 deletions src/i18n/strings/en_EN.json
Original file line number Diff line number Diff line change
Expand Up @@ -1515,6 +1515,8 @@
"last_person_warning": "You are the only person here. If you leave, no one will be able to join in the future, including you.",
"leave_room_question": "Are you sure you want to leave the room '%(roomName)s'?",
"leave_space_question": "Are you sure you want to leave the space '%(spaceName)s'?",
"room_leave_admin_warning": "You're the only administrator in this room. If you leave, nobody will be able to change room settings or take other important actions.",
"room_leave_mod_warning": "You're the only moderator in this room. If you leave, nobody will be able to change room settings or take other important actions.",
"room_rejoin_warning": "This room is not public. You will not be able to rejoin without an invite.",
"space_rejoin_warning": "This space is not public. You will not be able to rejoin without an invite."
},
Expand Down

0 comments on commit 03dc48b

Please sign in to comment.