| |
| "use client"; |
| import { useQuery, useQueryClient } from "@tanstack/react-query"; |
|
|
| import { useRouter } from "next/navigation"; |
|
|
| import { User } from "@/types"; |
| import { isAuthenticated } from "@/lib/auth"; |
| import { toast } from "sonner"; |
|
|
| export const useUser = (initialData?: { |
| user: User | null; |
| errCode: number | null; |
| }) => { |
| const client = useQueryClient(); |
| const router = useRouter(); |
|
|
| const { data: { user, errCode } = { user: null, errCode: null }, isLoading } = |
| useQuery({ |
| queryKey: ["user.me"], |
| queryFn: async () => { |
| const authResult = await isAuthenticated(); |
| if (authResult && "id" in authResult) { |
| return { user: authResult as User, errCode: null }; |
| } |
| return { user: null, errCode: 401 }; |
| }, |
| refetchOnWindowFocus: false, |
| refetchOnReconnect: false, |
| refetchOnMount: false, |
| retry: false, |
| initialData: initialData |
| ? { user: initialData?.user, errCode: initialData?.errCode } |
| : undefined, |
| enabled: true, |
| }); |
|
|
| const logout = async () => { |
| |
| toast.success("Logout successful"); |
| client.setQueryData(["user.me"], { |
| user: null, |
| errCode: null, |
| }); |
| window.location.reload(); |
| }; |
|
|
| return { |
| user, |
| errCode, |
| loading: isLoading, |
| logout, |
| }; |
| }; |