mirror of
https://github.com/cinnyapp/cinny.git
synced 2025-11-09 16:50:28 +03:00
* fix room members hook * fix resize observer hook * add intersection observer hook * install react-virtual lib * improve right panel - WIP * add filters for members * fix bug in async search * categories members and add search * show spinner on room member fetch * make invite member btn clickable * so no member text * add line between room view and member drawer * fix imports * add screen size hook * fix set setting hook * make member drawer responsive * extract power level tags hook * fix room members hook * fix use async search api * produce search result on filter change
37 lines
1.1 KiB
TypeScript
37 lines
1.1 KiB
TypeScript
import { MatrixClient, MatrixEvent, RoomMember, RoomMemberEvent } from 'matrix-js-sdk';
|
|
import { useEffect, useState } from 'react';
|
|
|
|
export const useRoomMembers = (mx: MatrixClient, roomId: string): RoomMember[] => {
|
|
const [members, setMembers] = useState<RoomMember[]>([]);
|
|
|
|
useEffect(() => {
|
|
const room = mx.getRoom(roomId);
|
|
let loadingMembers = true;
|
|
let disposed = false;
|
|
|
|
const updateMemberList = (event?: MatrixEvent) => {
|
|
if (!room || disposed || (event && event.getRoomId() !== roomId)) return;
|
|
if (loadingMembers) return;
|
|
setMembers(room.getMembers());
|
|
};
|
|
|
|
if (room) {
|
|
setMembers(room.getMembers());
|
|
room.loadMembersIfNeeded().then(() => {
|
|
loadingMembers = false;
|
|
if (disposed) return;
|
|
updateMemberList();
|
|
});
|
|
}
|
|
|
|
mx.on(RoomMemberEvent.Membership, updateMemberList);
|
|
mx.on(RoomMemberEvent.PowerLevel, updateMemberList);
|
|
return () => {
|
|
disposed = true;
|
|
mx.removeListener(RoomMemberEvent.Membership, updateMemberList);
|
|
mx.removeListener(RoomMemberEvent.PowerLevel, updateMemberList);
|
|
};
|
|
}, [mx, roomId]);
|
|
|
|
return members;
|
|
};
|