All files / src/hooks useAuth.ts

100% Statements 51/51
100% Branches 4/4
100% Functions 4/4
100% Lines 51/51

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 571x 1x 1x 1x   1x 9x 9x 9x 9x 9x 9x 9x 9x   9x 9x 1x 1x 1x 1x 1x 1x 1x 9x   9x 9x 1x 1x 1x 1x 1x 1x 1x 9x   9x 9x 9x 1x 1x 1x 9x   9x 9x 9x 9x 9x 9x 9x 9x 9x 9x 9x  
import { useMutation, useQueryClient } from "@tanstack/react-query";
import { signIn, signOut, signUp } from "../api/auth";
import { syncUser } from "../api/users";
import { useAuthStore } from "../stores/authStore";
 
export function useAuth() {
  const queryClient = useQueryClient();
  const {
    user,
    isAuthenticated,
    hasHydrated,
    setUser,
    logout: clearStore,
  } = useAuthStore();
 
  const loginMutation = useMutation({
    mutationFn: async (credentials: Parameters<typeof signIn>) => {
      const authUser = await signIn(...credentials);
      if (authUser) {
        const syncedUser = await syncUser();
        setUser({ id: syncedUser.id, email: syncedUser.email });
      }
      return authUser;
    },
  });
 
  const registerMutation = useMutation({
    mutationFn: async (credentials: Parameters<typeof signUp>) => {
      const authUser = await signUp(...credentials);
      if (authUser) {
        const syncedUser = await syncUser();
        setUser({ id: syncedUser.id, email: syncedUser.email });
      }
      return authUser;
    },
  });
 
  const logoutMutation = useMutation({
    mutationFn: signOut,
    onSuccess: () => {
      clearStore();
      queryClient.clear();
    },
  });
 
  return {
    user,
    isAuthenticated,
    hasHydrated,
    login: loginMutation.mutateAsync,
    register: registerMutation.mutateAsync,
    logout: logoutMutation.mutateAsync,
    isLoggingIn: loginMutation.isPending,
    isRegistering: registerMutation.isPending,
  };
}