import { useMutation, useQueryClient } from '@tanstack/react-query'; import { useLocation, useNavigate } from 'react-router-dom'; import { ISignInProps } from './interfaces'; import { signIn } from '../../../fetchers'; import { authQueryKeys } from '../../../query-keys'; export const useSignInMutation = () => { const queryClient = useQueryClient(); const navigate = useNavigate(); const getSession = authQueryKeys.authenticatedUser(); const { state } = useLocation(); return useMutation({ mutationFn: ({ callbackUrl, body }: ISignInProps) => signIn({ callbackUrl, body, }), onMutate: () => { void queryClient.cancelQueries(); }, onSuccess: (data, { callbackUrl, redirect }) => { queryClient.setQueryData(getSession.queryKey, data); if (!callbackUrl || !redirect) return; void navigate(callbackUrl, { replace: true, state: { from: state?.from, }, }); }, onSettled: () => { void queryClient.invalidateQueries({ queryKey: getSession.queryKey, }); }, }); };