import { Room, RoomEvent, RoomEventHandlerMap } from 'matrix-js-sdk'; import { useCallback, useEffect, useState } from 'react'; export const useRoomAccountData = (room: Room): Map => { const getAccountData = useCallback((): Map => { const accountData = new Map(); Array.from(room.accountData.entries()).forEach(([type, mEvent]) => { const content = mEvent.getContent(); accountData.set(type, content); }); return accountData; }, [room]); const [accountData, setAccountData] = useState>(getAccountData); useEffect(() => { const handleEvent: RoomEventHandlerMap[RoomEvent.AccountData] = () => { setAccountData(getAccountData()); }; room.on(RoomEvent.AccountData, handleEvent); return () => { room.removeListener(RoomEvent.AccountData, handleEvent); }; }, [room, getAccountData]); return accountData; };