65 lines
1.6 KiB
TypeScript
65 lines
1.6 KiB
TypeScript
import { useMutation, useQueryClient } from "@tanstack/react-query";
|
|
import { ApiResponse } from "@/types/api-response";
|
|
import { authService } from "./service";
|
|
import { LoginDto, RegisterDto, RefreshTokenDto, AuthResponse } from "./types";
|
|
|
|
export const AuthQueryKeys = {
|
|
all: ["auth"] as const,
|
|
session: () => [...AuthQueryKeys.all, "session"] as const,
|
|
};
|
|
|
|
export function useLogin() {
|
|
const queryClient = useQueryClient();
|
|
|
|
const { data, ...rest } = useMutation<
|
|
ApiResponse<AuthResponse>,
|
|
Error,
|
|
LoginDto
|
|
>({
|
|
mutationFn: (credentials: LoginDto) => authService.login(credentials),
|
|
onSuccess: () => {
|
|
queryClient.invalidateQueries({ queryKey: AuthQueryKeys.session() });
|
|
},
|
|
});
|
|
|
|
return { data: data?.data, ...rest };
|
|
}
|
|
|
|
export function useRegister() {
|
|
const { data, ...rest } = useMutation<
|
|
ApiResponse<AuthResponse>,
|
|
Error,
|
|
RegisterDto
|
|
>({
|
|
mutationFn: (userData: RegisterDto) => authService.register(userData),
|
|
});
|
|
|
|
return { data: data?.data, ...rest };
|
|
}
|
|
|
|
export function useRefreshToken() {
|
|
const { data, ...rest } = useMutation<
|
|
ApiResponse<AuthResponse>,
|
|
Error,
|
|
RefreshTokenDto
|
|
>({
|
|
mutationFn: (tokenData: RefreshTokenDto) =>
|
|
authService.refreshToken(tokenData),
|
|
});
|
|
|
|
return { data: data?.data, ...rest };
|
|
}
|
|
|
|
export function useLogout() {
|
|
const queryClient = useQueryClient();
|
|
|
|
const { data, ...rest } = useMutation<ApiResponse<null>, Error, void>({
|
|
mutationFn: () => authService.logout(),
|
|
onSuccess: () => {
|
|
queryClient.clear();
|
|
},
|
|
});
|
|
|
|
return { data: data?.data, ...rest };
|
|
}
|