diff --git a/src/app/state/mDirectList.ts b/src/app/state/mDirectList.ts new file mode 100644 index 00000000..263af4ad --- /dev/null +++ b/src/app/state/mDirectList.ts @@ -0,0 +1,20 @@ +import { atom } from 'jotai'; +import { ClientEvent, MatrixEvent } from 'matrix-js-sdk'; +import { mx } from '../../client/mx'; +import { AccountDataEvent } from '../../types/matrix/accountData'; +import { getAccountData, getMDirects } from '../utils/room'; + +export const mDirectAtom = atom(new Set()); +mDirectAtom.onMount = (setAtom) => { + const mDirectEvent = getAccountData(mx(), AccountDataEvent.Direct); + if (mDirectEvent) setAtom(getMDirects(mDirectEvent)); + + const handleAccountData = (event: MatrixEvent) => { + setAtom(getMDirects(event)); + }; + + mx().on(ClientEvent.AccountData, handleAccountData); + return () => { + mx().removeListener(ClientEvent.AccountData, handleAccountData); + }; +};