Add option to ban user in profile viewer
authorAjay Bura <ajbura@gmail.com>
Wed, 12 Jan 2022 13:20:54 +0000 (18:50 +0530)
committerAjay Bura <ajbura@gmail.com>
Wed, 12 Jan 2022 13:20:54 +0000 (18:50 +0530)
Signed-off-by: Ajay Bura <ajbura@gmail.com>
src/app/organisms/profile-viewer/ProfileViewer.jsx
src/client/action/room.js

index e6b3a839d78d141f662502c229d0268f7f50ef27..6eb370defa07ae66bb6b792fcd2d33629acb61d3 100644 (file)
@@ -44,6 +44,11 @@ function ModerationTools({
     && room.currentState.hasSufficientPowerLevelFor('kick', myPowerLevel)
     && powerLevel < myPowerLevel
   );
+  const canIBan = (
+    ['join', 'leave'].includes(roomMember?.membership)
+    && room.currentState.hasSufficientPowerLevelFor('ban', myPowerLevel)
+    && powerLevel < myPowerLevel
+  );
 
   const handleKick = (e) => {
     e.preventDefault();
@@ -51,15 +56,25 @@ function ModerationTools({
     roomActions.kick(roomId, userId, kickReason !== '' ? kickReason : undefined);
   };
 
+  const handleBan = (e) => {
+    e.preventDefault();
+    const banReason = e.target.elements['ban-reason']?.value.trim();
+    roomActions.ban(roomId, userId, banReason !== '' ? banReason : undefined);
+  };
+
   return (
     <div className="moderation-tools">
       {canIKick && (
-        <>
-          <form onSubmit={handleKick}>
-            <Input label="Kick reason" name="kick-reason" />
-            <Button type="submit">Kick</Button>
-          </form>
-        </>
+        <form onSubmit={handleKick}>
+          <Input label="Kick reason" name="kick-reason" />
+          <Button type="submit">Kick</Button>
+        </form>
+      )}
+      {canIBan && (
+        <form onSubmit={handleBan}>
+          <Input label="Ban reason" name="ban-reason" />
+          <Button type="submit">Ban</Button>
+        </form>
       )}
     </div>
   );
index 8d67afd0325d7db82a98ed7b7ccf353bc5592446..59839da4e1fe57423043663ce56cf29546081cfc 100644 (file)
@@ -199,6 +199,13 @@ async function kick(roomId, userId, reason) {
   return result;
 }
 
+async function ban(roomId, userId, reason) {
+  const mx = initMatrix.matrixClient;
+
+  const result = await mx.ban(roomId, userId, reason);
+  return result;
+}
+
 async function setPowerLevel(roomId, userId, powerLevel) {
   const mx = initMatrix.matrixClient;
   const room = mx.getRoom(roomId);
@@ -225,7 +232,7 @@ function deleteSpaceShortcut(roomId) {
 
 export {
   join, leave,
-  create, invite, kick,
+  create, invite, kick, ban,
   setPowerLevel,
   createSpaceShortcut, deleteSpaceShortcut,
 };