[BUG] `mutationOptions` are overriding Refine's behavior unexpectedly
Opened this issue · 2 comments
Describe the bug
Consider this:
import { useLogin } from "@refinedev/core";
const { mutateAsync: login, isLoading } = useLogin({
mutationOptions: {
onSuccess(data) {
console.log("Hey!");
},
},
});
And authProvider.ts
as follow:
"use client";
import { AuthBindings, HttpError } from "@refinedev/core";
export const authProvider: AuthBindings = {
login: async ({ username, password }) => {
try {
// Preform login
return { success: true, redirectTo: "/" };
} catch (error) {
return {
success: false,
error: { message: "Username or password is incorrect", statusCode: (error as HttpError).statusCode },
};
}
},
};
Then onSuccess
callback on useLogin
will override the Refine's behavior for onSuccess
causing the redirectTo
to not work.
Steps To Reproduce
- Create a login component
- Create an
authProvider
- Add a custom
onSuccess
callback inuseLogin({ mutationOptions: onSuccess() { /* callback */ }});
- Redirect doesn't happen after successful login
Expected behavior
mutationOptions
should work along side the Refine's default behavior, redirect should occur.
Packages
- @refinedev/core
Additional Context
No response
As this can be seen from this line:
refine/packages/core/src/hooks/auth/useLogin/index.ts
Lines 33 to 36 in e5cad51
We're omitting onSuccess
handler from the mutationOptions
on purpose.
On all other Refine hooks, we've omitted onSuccess
, onSettled
, onError
methods if we're using them in our implementation. If we're going to make them work without breaking the current implementation, we need to apply similar changes to all Refine hooks like in the PR #5889