Skip to content

Commit 271834e

Browse files
committed
feat: Support query key invalidate arg
1 parent 762e2f7 commit 271834e

File tree

2 files changed

+19
-8
lines changed

2 files changed

+19
-8
lines changed

packages/react/src/data-connect/types.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import type { QueryKey } from "@tanstack/react-query";
12
import type { MutationResult, QueryResult } from "firebase/data-connect";
23

34
// Flattens a QueryResult data down into a single object.
@@ -13,3 +14,8 @@ export type FlattenedMutationResult<Data, Variables> = Omit<
1314
"data" | "toJSON"
1415
> &
1516
Data;
17+
18+
// Helper function to determine if a key is a QueryKey.
19+
export function isQueryKey(key: unknown): key is QueryKey {
20+
return Array.isArray(key) && key.length > 0;
21+
}

packages/react/src/data-connect/useDataConnectMutation.ts

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import {
22
type UseMutationOptions,
3+
type QueryKey,
34
useMutation,
45
useQueryClient,
56
} from "@tanstack/react-query";
@@ -10,15 +11,15 @@ import {
1011
type QueryRef,
1112
executeMutation,
1213
} from "firebase/data-connect";
13-
import type { FlattenedMutationResult } from "./types";
14+
import { isQueryKey, type FlattenedMutationResult } from "./types";
1415

1516
export type useDataConnectMutationOptions<
1617
TData = unknown,
1718
TError = FirebaseError,
18-
Variables = unknown,
19+
Variables = unknown
1920
> = Omit<UseMutationOptions<TData, TError, Variables>, "mutationFn"> & {
20-
invalidate?: Array<
21-
QueryRef<unknown, unknown> | (() => QueryRef<unknown, unknown>)
21+
invalidate?: ReadonlyArray<
22+
QueryRef<unknown, unknown> | (() => QueryRef<unknown, unknown>) | QueryKey
2223
>;
2324
};
2425

@@ -27,19 +28,19 @@ export function useDataConnectMutation<
2728
Data = ReturnType<Fn> extends MutationRef<infer D, any> ? D : never,
2829
Variables = Fn extends (
2930
dc: DataConnect,
30-
vars: infer V,
31+
vars: infer V
3132
) => MutationRef<any, any>
3233
? V
3334
: Fn extends (vars: infer V) => MutationRef<any, any>
34-
? V
35-
: never,
35+
? V
36+
: never
3637
>(
3738
ref: Fn,
3839
options?: useDataConnectMutationOptions<
3940
FlattenedMutationResult<Data, Variables>,
4041
FirebaseError,
4142
Variables
42-
>,
43+
>
4344
) {
4445
const queryClient = useQueryClient();
4546

@@ -57,6 +58,10 @@ export function useDataConnectMutation<
5758
queryKey: [ref.name, ref.variables],
5859
exact: true,
5960
});
61+
} else if (isQueryKey(ref)) {
62+
queryClient.invalidateQueries({
63+
queryKey: ref,
64+
});
6065
} else {
6166
queryClient.invalidateQueries({
6267
queryKey: [ref.name],

0 commit comments

Comments
 (0)