| | |
| | "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, |
| | }; |
| | }; |