mirror of
https://github.com/array-in-a-matrix/xinny.git
synced 2024-06-11 08:57:07 -04:00
29 lines
847 B
TypeScript
29 lines
847 B
TypeScript
|
import { useCallback, useMemo } from 'react';
|
||
|
import { Room } from 'matrix-js-sdk';
|
||
|
import { StateEvent } from '../../types/matrix/room';
|
||
|
import { useForceUpdate } from './useForceUpdate';
|
||
|
import { useStateEventCallback } from './useStateEventCallback';
|
||
|
import { getStateEvents } from '../utils/room';
|
||
|
|
||
|
export const useStateEvents = (room: Room, eventType: StateEvent) => {
|
||
|
const [updateCount, forceUpdate] = useForceUpdate();
|
||
|
|
||
|
useStateEventCallback(
|
||
|
room.client,
|
||
|
useCallback(
|
||
|
(event) => {
|
||
|
if (event.getRoomId() === room.roomId && event.getType() === eventType) {
|
||
|
forceUpdate();
|
||
|
}
|
||
|
},
|
||
|
[room, eventType, forceUpdate]
|
||
|
)
|
||
|
);
|
||
|
|
||
|
return useMemo(
|
||
|
() => getStateEvents(room, eventType),
|
||
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||
|
[room, eventType, updateCount]
|
||
|
);
|
||
|
};
|