add room creators hook

This commit is contained in:
Ajay Bura 2025-07-22 08:58:50 +05:30
parent 7487e5322b
commit deb53a9359
3 changed files with 35 additions and 16 deletions

View file

@ -73,10 +73,13 @@ const getPowersLevelFromMatrixEvent = (mEvent?: MatrixEvent, creators?: string[]
export function usePowerLevels(room: Room): IPowerLevels {
const powerLevelsEvent = useStateEvent(room, StateEvent.RoomPowerLevels);
const powerLevels: IPowerLevels = useMemo(
() => getPowersLevelFromMatrixEvent(powerLevelsEvent, getRoomCreators(room)),
[room, powerLevelsEvent]
);
const powerLevels: IPowerLevels = useMemo(() => {
const createEvent = getStateEvent(room, StateEvent.RoomCreate);
return getPowersLevelFromMatrixEvent(
powerLevelsEvent,
createEvent ? getRoomCreators(createEvent) : undefined
);
}, [room, powerLevelsEvent]);
return powerLevels;
}
@ -98,7 +101,14 @@ export const useRoomsPowerLevels = (rooms: Room[]): Map<string, IPowerLevels> =>
rooms.forEach((room) => {
const mEvent = getStateEvent(room, StateEvent.RoomPowerLevels, '');
rToPl.set(room.roomId, getPowersLevelFromMatrixEvent(mEvent, getRoomCreators(room)));
const createEvent = getStateEvent(room, StateEvent.RoomCreate);
rToPl.set(
room.roomId,
getPowersLevelFromMatrixEvent(
mEvent,
createEvent ? getRoomCreators(createEvent) : undefined
)
);
});
return rToPl;

View file

@ -0,0 +1,16 @@
import { Room } from 'matrix-js-sdk';
import { useMemo } from 'react';
import { useStateEvent } from './useStateEvent';
import { StateEvent } from '../../types/matrix/room';
import { getRoomCreators } from '../utils/room';
export const useRoomCreators = (room: Room): string[] | undefined => {
const createEvent = useStateEvent(room, StateEvent.RoomCreate);
const creators = useMemo(
() => (createEvent ? getRoomCreators(createEvent) : undefined),
[createEvent]
);
return creators;
};

View file

@ -516,10 +516,7 @@ export const guessPerfectParent = (
return perfectParent;
};
export const getRoomCreators = (room: Room): string[] | undefined => {
const createEvent = getStateEvent(room, StateEvent.RoomCreate);
if (!createEvent) return undefined;
export const getRoomCreators = (createEvent: MatrixEvent): string[] | undefined => {
const createContent = createEvent.getContent<IRoomCreateContent>();
const roomVersion = createContent.room_version;
@ -530,15 +527,11 @@ export const getRoomCreators = (room: Room): string[] | undefined => {
const creators: Set<string> = new Set();
if (createEvent?.event.sender) {
creators.add(createEvent?.event.sender);
if (createEvent.event.sender) {
creators.add(createEvent.event.sender);
}
if (
createContent &&
'additional_creators' in createContent &&
Array.isArray(createContent.additional_creators)
) {
if ('additional_creators' in createContent && Array.isArray(createContent.additional_creators)) {
createContent.additional_creators.forEach((creator) => {
if (typeof creator === 'string') {
creators.add(creator);