You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
36 lines
808 B
36 lines
808 B
import { useQuery } from "@tanstack/react-query";
|
|
|
|
import axios from "axios";
|
|
|
|
import { User } from "@prisma/client";
|
|
|
|
import { User as UserModel } from "@models/user";
|
|
|
|
import { parseAxiosError, parseAxiosResponse } from "@utils/fetch";
|
|
|
|
const useUser = (): User | null => {
|
|
const { data } = useQuery(
|
|
["user"],
|
|
async () => {
|
|
const response = await axios
|
|
.get("/api/user")
|
|
.then(parseAxiosResponse)
|
|
.catch(parseAxiosError);
|
|
|
|
if (response.ok) return response.data;
|
|
else throw response.error;
|
|
},
|
|
{ retry: () => false, enabled: typeof window !== "undefined" }
|
|
);
|
|
|
|
if (typeof window === "undefined") return null;
|
|
|
|
const parseUserResult = UserModel.safeParse(data);
|
|
|
|
if (parseUserResult.success) {
|
|
return parseUserResult.data;
|
|
} else return null;
|
|
};
|
|
|
|
export default useUser;
|