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

100% Statements 17/17
93.75% Branches 15/16
100% Functions 4/4
100% Lines 17/17

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 53 54 55 56 57 581x 1x   1x 1x   17x             17x     8x 7x           17x 10x             17x   17x           17x   17x   3x         17x   17x              
import { friendRequestKey, FriendRequestType } from "features/queryKeys";
import { useLiteUsers } from "features/userQueries/useLiteUsers";
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: liteUsersData,
    isLoading: isLiteUsersLoading,
    error: liteUserError,
  } = useLiteUsers(userIds);
 
  const errors = error
    ? [error.message, liteUserError?.message]
    : liteUserError?.message
    ? [liteUserError.message]
    : [];
 
  const isLoading = isFriendReqLoading || isLiteUsersLoading;
 
  const formattedFriendRequests = !liteUsersData
    ? []
    : (friendRequestLists ?? []).map((friendRequest) => ({
        ...friendRequest,
        friend: liteUsersData.get(friendRequest.userId),
      }));
 
  const data = !isLoading ? formattedFriendRequests : undefined;
 
  return {
    data,
    errors,
    isError: !!errors.length,
    isLoading,
  };
}