Automatic update people list
authorAjay Bura <ajbura@gmail.com>
Fri, 29 Oct 2021 12:41:02 +0000 (18:11 +0530)
committerAjay Bura <ajbura@gmail.com>
Fri, 29 Oct 2021 12:41:02 +0000 (18:11 +0530)
Signed-off-by: Ajay Bura <ajbura@gmail.com>
src/app/organisms/profile-viewer/ProfileViewer.jsx
src/app/organisms/room/PeopleDrawer.jsx

index 6705b29333142f05e99ee5d96db39403715f3c19..191678a3e76126d0f933f3b29160cc6801026608 100644 (file)
@@ -92,6 +92,9 @@ function ProfileFooter({ roomId, userId, onRequestClose }) {
   const [isInviting, setIsInviting] = useState(false);
   const [isInvited, setIsInvited] = useState(member?.membership === 'invite');
 
+  const myPowerlevel = room.getMember(mx.getUserId()).powerLevel;
+  const canIKick = room.currentState.hasSufficientPowerLevelFor('kick', myPowerlevel);
+
   useEffect(() => () => {
     isMountedRef.current = false;
   }, []);
@@ -180,8 +183,11 @@ function ProfileFooter({ roomId, userId, onRequestClose }) {
         {isCreatingDM ? 'Creating room...' : 'Message'}
       </Button>
       { member?.membership === 'join' && <Button>Mention</Button>}
-      {room.canInvite(mx.getUserId()) && isInvitable && (
-        <Button onClick={toggleInvite}>
+      { (isInvited ? canIKick : room.canInvite(mx.getUserId())) && isInvitable && (
+        <Button
+          onClick={toggleInvite}
+          disabled={isInviting}
+        >
           {
             isInvited
               ? `${isInviting ? 'Disinviting...' : 'Disinvite'}`
index 050d8b6a3abf6a1bb0dd43308fc58e11e42ef00d..268e43b2a85b6ab4883fd7a2600524543f3052da 100644 (file)
@@ -103,30 +103,35 @@ function PeopleDrawer({ roomId }) {
   }, [memberList]);
 
   useEffect(() => {
-    searchRef.current.value = '';
-    setMemberList(
-      simplyfiMembers(
-        getMembersWithMembership(membership)
-          .sort(AtoZ).sort(sortByPowerLevel),
-      ),
-    );
-    room.loadMembersIfNeeded().then(() => {
-      if (isRoomChanged) return;
+    let isGettingMembers = true;
+    const updateMemberList = (event) => {
+      if (isGettingMembers) return;
+      console.log(event?.event?.room_id);
+      if (event && event?.event?.room_id !== roomId) return;
       setMemberList(
         simplyfiMembers(
           getMembersWithMembership(membership)
             .sort(AtoZ).sort(sortByPowerLevel),
         ),
       );
+    };
+    searchRef.current.value = '';
+    updateMemberList();
+    room.loadMembersIfNeeded().then(() => {
+      isGettingMembers = false;
+      if (isRoomChanged) return;
+      updateMemberList();
     });
 
     asyncSearch.on(asyncSearch.RESULT_SENT, handleSearchData);
+    mx.on('RoomMember.membership', updateMemberList);
     return () => {
       isRoomChanged = true;
       setMemberList([]);
       setSearchedMembers(null);
       setItemCount(PER_PAGE_MEMBER);
       asyncSearch.removeListener(asyncSearch.RESULT_SENT, handleSearchData);
+      mx.removeListener('RoomMember.membership', updateMemberList);
     };
   }, [roomId, membership]);