Calling Functions

The useFunctionsCall enables you to call a Callable Cloud Function on demand.

For example, lets assume we have a updateProduct Callable HTTPS Function deployed which accepts a product ID and data to update. Instead of calling this function as we render, we can instead call it as a mutation on demand.

import React from "react";
import { useFunctionsCall } from "@react-query-firebase/functions";
import { functions } from "../firebase";

function Product({ id }: { id: number }) {
  const mutation = useFunctionsCall(functions, "updateProduct");

  return (
    <button
      disabled={mutation.isLoading}
      onClick={() => {
        mutation.mutate({
          id,
          name: "New product name!",
        });
      }}
    >
      Update Product Name
    </button>
  );
}

The hook is built on top of the useMutation hook.

HttpsCallableOptions#

The 3rd argument of the hook accepts an optional HttpsCallableOptions argument which will be used when requested. For example we can increase the timeout of the request.

const mutation = useFunctionsCall(functions, "updateProduct", {
  timeout: 10000,
});

React Query options#

The 4th optional argument accepts options of the useMutation hook, allowing us handle things such as side effects.

const mutation = useFunctionsCall(
  functions,
  "updateProduct",
  {
    timeout: 10000,
  },
  {
    onSuccess() {
      console.log("Product updated...");
    },
    onError(error) {
      console.error("Failed to update product...", error);
    },
    onMutate(variables) {
      console.log("Updating product with variables", variables);
    },
  }
);