diff --git a/src/room/InCallView.tsx b/src/room/InCallView.tsx index 3b798e1f3..62bdabf63 100644 --- a/src/room/InCallView.tsx +++ b/src/room/InCallView.tsx @@ -316,6 +316,41 @@ export const InCallView: FC = ({ const userId = `${username}:${localpart}`; const isHandRaised = raisedHands.includes(userId); + useEffect(() => { + const getLastReactionEvent = async ( + eventId: string, + ): Promise => { + const rels = await client.relations( + rtcSession.room.roomId, + eventId, + RelationType.Annotation, + EventType.Reaction, + { + limit: 1, + }, + ); + + return rels.events.length > 0 ? rels.events[0] : undefined; + }; + + const fetchReactions = async (): Promise => { + const newRaisedHands = [...raisedHands]; + for (const m of memberships) { + const reaction = await getLastReactionEvent(m.eventId!); + if (reaction && reaction.getType() === EventType.Reaction) { + const content = reaction.getContent() as ReactionEventContent; + if (content?.["m.relates_to"].key === "🖐️") { + newRaisedHands.push(m.sender!); + } + } + } + setRaisedHands(newRaisedHands); + }; + + fetchReactions(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + useEffect(() => { const handleReactionEvent = (event: MatrixEvent): void => { if (event.getType() === EventType.Reaction) { diff --git a/src/widget.ts b/src/widget.ts index f08968b65..9d3da4792 100644 --- a/src/widget.ts +++ b/src/widget.ts @@ -103,6 +103,8 @@ export const widget = ((): WidgetHelpers | null => { const sendRecvEvent = [ "org.matrix.rageshake_request", EventType.CallEncryptionKeysPrefix, + EventType.Reaction, + EventType.RoomRedaction, ]; const sendState = [