Update hook to keep method signature (accepting an array of Rooms instead) to support multiple room event tracking of the same event

This commit is contained in:
Gigiaj 2025-05-04 12:14:46 -05:00
parent 2841386972
commit b40ddf0c61

View file

@ -1,28 +1,35 @@
import { useCallback, useMemo } from 'react'; import { useCallback, useMemo } from 'react';
import { Room } from 'matrix-js-sdk'; import { MatrixEvent, Room } from 'matrix-js-sdk';
import { StateEvent } from '../../types/matrix/room'; import { StateEvent } from '../../types/matrix/room';
import { useMatrixClient } from './useMatrixClient';
import { useForceUpdate } from './useForceUpdate'; import { useForceUpdate } from './useForceUpdate';
import { useStateEventCallback } from './useStateEventCallback'; import { useStateEventCallback } from './useStateEventCallback';
import { getStateEvents } from '../utils/room';
export const useStateEvents = (room: Room, eventType: StateEvent) => { export const useStateEvents = (rooms: Room[], eventType: StateEvent): number => {
const mx = useMatrixClient();
const [updateCount, forceUpdate] = useForceUpdate(); const [updateCount, forceUpdate] = useForceUpdate();
useStateEventCallback( const relevantRoomIds = useMemo(() => {
room.client, const ids = new Set<string>();
useCallback( if (rooms && Array.isArray(rooms)) {
(event) => { rooms.forEach((room) => {
if (event.getRoomId() === room.roomId && event.getType() === eventType) { if (room?.roomId) {
forceUpdate(); ids.add(room.roomId);
} }
}, });
[room, eventType, forceUpdate] }
) return ids;
); }, [rooms]);
const handleEventCallback = useCallback(
return useMemo( (event: MatrixEvent) => {
() => getStateEvents(room, eventType), const eventRoomId = event.getRoomId();
// eslint-disable-next-line react-hooks/exhaustive-deps if (eventRoomId && event.getType() === eventType && relevantRoomIds.has(eventRoomId)) {
[room, eventType, updateCount] forceUpdate();
}
},
[eventType, relevantRoomIds, forceUpdate]
); );
useStateEventCallback(mx, handleEventCallback);
return updateCount;
}; };