tqf
Version:
React Query hooks for Firebase.
65 lines (60 loc) • 1.55 kB
text/typescript
import {
QueryKey,
useMutation,
UseMutationOptions,
UseMutationResult,
useQuery,
UseQueryOptions,
UseQueryResult,
} from "@tanstack/react-query";
import {
Functions,
httpsCallable,
HttpsCallableOptions,
} from "firebase/functions";
export function useFunctionsQuery<
RequestData = any,
ResponseData = unknown,
ModifiedData = ResponseData
>(
key: QueryKey,
functions: Functions,
trigger: string,
data?: RequestData | null,
options?: HttpsCallableOptions,
useQueryOptions?: Omit<
UseQueryOptions<ResponseData, Error, ModifiedData>,
"queryFn"
>
): UseQueryResult<ModifiedData, Error> {
return useQuery<ResponseData, Error, ModifiedData>({
...useQueryOptions,
queryKey: useQueryOptions?.queryKey ?? key,
async queryFn() {
const response = await httpsCallable<RequestData, ResponseData>(
functions,
trigger,
options
)(data);
return response.data;
},
});
}
export function useFunctionsCall<RequestData = any, ResponseData = unknown>(
functions: Functions,
trigger: string,
options?: HttpsCallableOptions,
useMutationOptions?: UseMutationOptions<ResponseData, Error, RequestData>
): UseMutationResult<ResponseData, Error, RequestData> {
return useMutation<ResponseData, Error, RequestData>({
...useMutationOptions,
mutationFn: async (data) => {
const response = await httpsCallable<RequestData, ResponseData>(
functions,
trigger,
options
)(data);
return response.data;
},
});
}