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;
}, []);
{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'}`
}, [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]);