mirror of
https://github.com/cinnyapp/cinny.git
synced 2025-11-10 01:00:28 +03:00
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:
parent
2841386972
commit
b40ddf0c61
1 changed files with 25 additions and 18 deletions
|
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue