All files / app/features/connections/friends useFriendRequests.ts

100% Statements 16/16
100% Branches 14/14
100% Functions 4/4
100% Lines 16/16

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 531x 1x   1x 1x   1x             24x     8x 7x           24x 21x             24x   24x   24x     24x 12x           24x              
import { friendRequestKey, FriendRequestType } from "features/queryKeys";
import useUsers from "features/userQueries/useUsers";
import { FriendRequest } from "proto/api_pb";
import { useQuery } from "react-query";
import { service } from "service";
 
export default function useFriendRequests(
  friendRequestType: FriendRequestType
) {
  const {
    data: friendRequestLists,
    isLoading: isFriendReqLoading,
    error,
  } = useQuery<FriendRequest.AsObject[], Error>(
    friendRequestKey(friendRequestType),
    async () => {
      const friendRequests = await service.api.listFriendRequests();
      return friendRequestType === "sent"
        ? friendRequests.sentList
        : friendRequests.receivedList;
    }
  );
 
  const userIds = (friendRequestLists ?? []).map(
    (friendReq) => friendReq.userId
  );
 
  const {
    data: usersData,
    isLoading: isUsersLoading,
    errors: usersErrors,
  } = useUsers(userIds);
 
  const errors = error ? [error.message, ...usersErrors] : usersErrors;
 
  const isLoading = isFriendReqLoading || isUsersLoading;
 
  const data =
    !isLoading && usersData
      ? (friendRequestLists ?? []).map((friendRequest) => ({
          ...friendRequest,
          friend: usersData.get(friendRequest.userId),
        }))
      : void 0;
 
  return {
    data,
    errors,
    isError: !!errors.length,
    isLoading,
  };
}