Files
cinny/src/app/state/hooks/inviteList.ts
T

56 lines
1.8 KiB
TypeScript
Raw Normal View History

2024-01-21 23:50:56 +11:00
import { useAtomValue } from 'jotai';
2023-06-12 21:15:23 +10:00
import { selectAtom } from 'jotai/utils';
import { MatrixClient } from 'matrix-js-sdk';
import { useCallback } from 'react';
import { isDirectInvite, isRoom, isSpace, isUnsupportedRoom } from '../../utils/room';
import { compareRoomsEqual } from '../room-list/utils';
import { allInvitesAtom } from '../room-list/inviteList';
2023-06-12 21:15:23 +10:00
2024-01-21 23:50:56 +11:00
export const useSpaceInvites = (mx: MatrixClient, invitesAtom: typeof allInvitesAtom) => {
2023-06-12 21:15:23 +10:00
const selector = useCallback(
(rooms: string[]) => rooms.filter((roomId) => isSpace(mx.getRoom(roomId))),
[mx],
2023-06-12 21:15:23 +10:00
);
2024-01-21 23:50:56 +11:00
return useAtomValue(selectAtom(invitesAtom, selector, compareRoomsEqual));
2023-06-12 21:15:23 +10:00
};
export const useRoomInvites = (
mx: MatrixClient,
2024-01-21 23:50:56 +11:00
invitesAtom: typeof allInvitesAtom,
mDirects: Set<string>,
2023-06-12 21:15:23 +10:00
) => {
const selector = useCallback(
(rooms: string[]) =>
rooms.filter(
(roomId) =>
isRoom(mx.getRoom(roomId)) &&
!(mDirects.has(roomId) || isDirectInvite(mx.getRoom(roomId), mx.getUserId())),
2023-06-12 21:15:23 +10:00
),
[mx, mDirects],
2023-06-12 21:15:23 +10:00
);
2024-01-21 23:50:56 +11:00
return useAtomValue(selectAtom(invitesAtom, selector, compareRoomsEqual));
2023-06-12 21:15:23 +10:00
};
export const useDirectInvites = (
mx: MatrixClient,
2024-01-21 23:50:56 +11:00
invitesAtom: typeof allInvitesAtom,
mDirects: Set<string>,
2023-06-12 21:15:23 +10:00
) => {
const selector = useCallback(
(rooms: string[]) =>
rooms.filter(
(roomId) => mDirects.has(roomId) || isDirectInvite(mx.getRoom(roomId), mx.getUserId()),
2023-06-12 21:15:23 +10:00
),
[mx, mDirects],
2023-06-12 21:15:23 +10:00
);
2024-01-21 23:50:56 +11:00
return useAtomValue(selectAtom(invitesAtom, selector, compareRoomsEqual));
2023-06-12 21:15:23 +10:00
};
2024-01-21 23:50:56 +11:00
export const useUnsupportedInvites = (mx: MatrixClient, invitesAtom: typeof allInvitesAtom) => {
2023-06-12 21:15:23 +10:00
const selector = useCallback(
(rooms: string[]) => rooms.filter((roomId) => isUnsupportedRoom(mx.getRoom(roomId))),
[mx],
2023-06-12 21:15:23 +10:00
);
2024-01-21 23:50:56 +11:00
return useAtomValue(selectAtom(invitesAtom, selector, compareRoomsEqual));
2023-06-12 21:15:23 +10:00
};