From 31cb1c950d07c7c06a6c25f5b88da10b99b70f4b Mon Sep 17 00:00:00 2001 From: HassanBahati Date: Fri, 17 Jan 2025 11:22:18 +0300 Subject: [PATCH 1/2] feat(react): add useEnableNetworkMutation --- .../js/default-connector/package.json | 2 +- packages/react/src/firestore/index.ts | 2 +- .../useEnableNetworkMutation.test.tsx | 66 +++++++++++++++++++ .../src/firestore/useEnableNetworkMutation.ts | 21 ++++++ 4 files changed, 89 insertions(+), 2 deletions(-) create mode 100644 packages/react/src/firestore/useEnableNetworkMutation.test.tsx create mode 100644 packages/react/src/firestore/useEnableNetworkMutation.ts diff --git a/dataconnect-sdk/js/default-connector/package.json b/dataconnect-sdk/js/default-connector/package.json index d77efcc5..c2c1c4a5 100644 --- a/dataconnect-sdk/js/default-connector/package.json +++ b/dataconnect-sdk/js/default-connector/package.json @@ -20,6 +20,6 @@ "./package.json": "./package.json" }, "peerDependencies": { - "firebase": "^10.14.0 || ^11.0.0" + "firebase": "^10.14.0" } } \ No newline at end of file diff --git a/packages/react/src/firestore/index.ts b/packages/react/src/firestore/index.ts index ec75c7b1..9b54af62 100644 --- a/packages/react/src/firestore/index.ts +++ b/packages/react/src/firestore/index.ts @@ -1,7 +1,7 @@ export { useClearIndexedDbPersistenceMutation } from "./useClearIndexedDbPersistenceMutation"; // useEnableIndexedDbPersistenceMutation export { useDisableNetworkMutation } from "./useDisableNetworkMutation"; -// useEnableNetworkMutation +export { useEnableNetworkMutation } from "./useEnableNetworkMutation"; export { useWaitForPendingWritesQuery } from "./useWaitForPendingWritesQuery"; export { useRunTransactionMutation } from "./useRunTransactionMutation"; export { useWriteBatchCommitMutation } from "./useWriteBatchCommitMutation"; diff --git a/packages/react/src/firestore/useEnableNetworkMutation.test.tsx b/packages/react/src/firestore/useEnableNetworkMutation.test.tsx new file mode 100644 index 00000000..18adc446 --- /dev/null +++ b/packages/react/src/firestore/useEnableNetworkMutation.test.tsx @@ -0,0 +1,66 @@ +import { act, renderHook, waitFor } from "@testing-library/react"; +import { + doc, + disableNetwork, + getDocFromServer, + setDoc, +} from "firebase/firestore"; +import { beforeEach, describe, expect, test, vi } from "vitest"; +import { + expectFirestoreError, + firestore, + wipeFirestore, +} from "~/testing-utils"; +import { useEnableNetworkMutation } from "./useEnableNetworkMutation"; +import { queryClient } from "../../utils"; +import { wrapper } from "../../utils"; + +describe("useEnableNetworkMutation", () => { + beforeEach(async () => { + queryClient.clear(); + await disableNetwork(firestore); + await wipeFirestore(); + }); + + test("should successfully enable the Firestore network", async () => { + const docRef = doc(firestore, "tests", "useEnableNetworkMutation"); + const mockData = { library: "tanstack-query-firebase" }; + + const { result } = renderHook(() => useEnableNetworkMutation(firestore), { + wrapper, + }); + + // Enable the network + await act(() => result.current.mutate()); + await waitFor(() => expect(result.current.isSuccess).toBe(true)); + + await setDoc(docRef, mockData); + + const fetchedDoc = await getDocFromServer(docRef); + + expect(fetchedDoc.exists()).toBe(true); + expect(fetchedDoc.data()).toEqual(mockData); + }); + + test("handles mutation options correctly", async () => { + const onSuccessMock = vi.fn(); + const onErrorMock = vi.fn(); + + const { result } = renderHook( + () => + useEnableNetworkMutation(firestore, { + onSuccess: onSuccessMock, + onError: onErrorMock, + }), + { wrapper } + ); + + await act(() => result.current.mutate()); + + await waitFor(() => { + expect(result.current.isSuccess).toBe(true); + expect(onSuccessMock).toHaveBeenCalled(); + expect(onErrorMock).not.toHaveBeenCalled(); + }); + }); +}); diff --git a/packages/react/src/firestore/useEnableNetworkMutation.ts b/packages/react/src/firestore/useEnableNetworkMutation.ts new file mode 100644 index 00000000..dcd6dd54 --- /dev/null +++ b/packages/react/src/firestore/useEnableNetworkMutation.ts @@ -0,0 +1,21 @@ +import { type UseMutationOptions, useMutation } from "@tanstack/react-query"; +import { + type Firestore, + type FirestoreError, + enableNetwork, +} from "firebase/firestore"; + +type FirestoreUseMutationOptions = Omit< + UseMutationOptions, + "mutationFn" +>; + +export function useEnableNetworkMutation( + firestore: Firestore, + options?: FirestoreUseMutationOptions +) { + return useMutation({ + ...options, + mutationFn: () => enableNetwork(firestore), + }); +} From 5ebb1a6ad0e2192c10bb00aba312064c7d3cf051 Mon Sep 17 00:00:00 2001 From: HassanBahati Date: Fri, 17 Jan 2025 11:23:28 +0300 Subject: [PATCH 2/2] _ --- dataconnect-sdk/js/default-connector/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dataconnect-sdk/js/default-connector/package.json b/dataconnect-sdk/js/default-connector/package.json index c2c1c4a5..d77efcc5 100644 --- a/dataconnect-sdk/js/default-connector/package.json +++ b/dataconnect-sdk/js/default-connector/package.json @@ -20,6 +20,6 @@ "./package.json": "./package.json" }, "peerDependencies": { - "firebase": "^10.14.0" + "firebase": "^10.14.0 || ^11.0.0" } } \ No newline at end of file