Skip to content

Commit

Permalink
refactor(useSendSignInLinkToEmailMutation): allow passing reactive va…
Browse files Browse the repository at this point in the history
…lues to the mutation function
  • Loading branch information
HassanBahati committed Oct 9, 2024
1 parent 10f3395 commit 064bcf1
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 17 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import React from "react";
import { describe, expect, test, beforeEach, afterEach } from "vitest";
import { describe, expect, test, beforeEach } from "vitest";
import { renderHook, act, waitFor } from "@testing-library/react";
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
import { useSendSignInLinkToEmailMutation } from "./useSendSignInLinkToEmailMutation";
Expand Down Expand Up @@ -38,12 +38,12 @@ describe("useSendSignInLinkToEmailMutation", () => {

test("resets mutation state correctly", async () => {
const { result } = renderHook(
() => useSendSignInLinkToEmailMutation(auth, email, actionCodeSettings),
() => useSendSignInLinkToEmailMutation(auth),
{ wrapper }
);

act(() => {
result.current.mutate();
result.current.mutate({ email, actionCodeSettings });
});

await waitFor(() => {
Expand All @@ -63,12 +63,12 @@ describe("useSendSignInLinkToEmailMutation", () => {

test("successfully sends sign-in link to email", async () => {
const { result } = renderHook(
() => useSendSignInLinkToEmailMutation(auth, email, actionCodeSettings),
() => useSendSignInLinkToEmailMutation(auth),
{ wrapper }
);

act(() => {
result.current.mutate();
result.current.mutate({ email, actionCodeSettings });
});

await waitFor(() => {
Expand All @@ -81,13 +81,13 @@ describe("useSendSignInLinkToEmailMutation", () => {

test("allows multiple sequential send attempts", async () => {
const { result } = renderHook(
() => useSendSignInLinkToEmailMutation(auth, email, actionCodeSettings),
() => useSendSignInLinkToEmailMutation(auth),
{ wrapper }
);

// First attempt
act(() => {
result.current.mutate();
result.current.mutate({ email, actionCodeSettings });
});

await waitFor(() => {
Expand All @@ -107,7 +107,7 @@ describe("useSendSignInLinkToEmailMutation", () => {

// Second attempt
act(() => {
result.current.mutate();
result.current.mutate({ email, actionCodeSettings });
});

await waitFor(() => {
Expand Down
23 changes: 14 additions & 9 deletions packages/react/src/auth/useSendSignInLinkToEmailMutation.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,19 +6,24 @@ import {
sendSignInLinkToEmail,
} from "firebase/auth";

type AuthUseMutationOptions<TData = unknown, TError = Error> = Omit<
UseMutationOptions<TData, TError, void>,
"mutationFn"
>;
type SendSignInLinkParams = {
email: string;
actionCodeSettings: ActionCodeSettings;
};

type AuthUseMutationOptions<
TData = unknown,
TError = Error,
TVariables = void
> = Omit<UseMutationOptions<TData, TError, TVariables>, "mutationFn">;

export function useSendSignInLinkToEmailMutation(
auth: Auth,
email: string,
actionCodeSettings: ActionCodeSettings,
options?: AuthUseMutationOptions
options?: AuthUseMutationOptions<void, AuthError, SendSignInLinkParams>
) {
return useMutation<void, AuthError, void>({
return useMutation<void, AuthError, SendSignInLinkParams>({
...options,
mutationFn: () => sendSignInLinkToEmail(auth, email, actionCodeSettings),
mutationFn: ({ email, actionCodeSettings }) =>
sendSignInLinkToEmail(auth, email, actionCodeSettings),
});
}

0 comments on commit 064bcf1

Please sign in to comment.