From deb53a935953db29484388d461050bd89b278c3e Mon Sep 17 00:00:00 2001 From: Ajay Bura <32841439+ajbura@users.noreply.github.com> Date: Tue, 22 Jul 2025 08:58:50 +0530 Subject: [PATCH] add room creators hook --- src/app/hooks/usePowerLevels.ts | 20 +++++++++++++++----- src/app/hooks/useRoomCreators.ts | 16 ++++++++++++++++ src/app/utils/room.ts | 15 ++++----------- 3 files changed, 35 insertions(+), 16 deletions(-) create mode 100644 src/app/hooks/useRoomCreators.ts diff --git a/src/app/hooks/usePowerLevels.ts b/src/app/hooks/usePowerLevels.ts index ea007c8c..c16608bb 100644 --- a/src/app/hooks/usePowerLevels.ts +++ b/src/app/hooks/usePowerLevels.ts @@ -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 => 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; diff --git a/src/app/hooks/useRoomCreators.ts b/src/app/hooks/useRoomCreators.ts new file mode 100644 index 00000000..4a460fa5 --- /dev/null +++ b/src/app/hooks/useRoomCreators.ts @@ -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; +}; diff --git a/src/app/utils/room.ts b/src/app/utils/room.ts index 8aff98fa..7551d193 100644 --- a/src/app/utils/room.ts +++ b/src/app/utils/room.ts @@ -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(); const roomVersion = createContent.room_version; @@ -530,15 +527,11 @@ export const getRoomCreators = (room: Room): string[] | undefined => { const creators: Set = 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);