Skip to main content

useRequestQuote

Use useRequestQuote when a product is set up as an offer/quote request instead of a direct purchase. It returns a RequestQuoteController that loads the configured inquiry form, validates input, and submits the quote request (optionally with an email) along with a snapshot of the current configuration.

Getting the controller​

import { useRequestQuote, REQUEST_QUOTE_EMAIL_FIELD_KEY } from "@expivi/product-configurator";

const controller = useRequestQuote(configurator);

REQUEST_QUOTE_EMAIL_FIELD_KEY (value "_email") is the reserved key to use in your form payload for the shopper's email address.

Example: fetch the form and submit a quote​

const controller = useRequestQuote(configurator);

if (controller.isVisible) {
// Load the inquiry form definition for the main product
const form = await controller.fetchForm();

await controller.submit({
[REQUEST_QUOTE_EMAIL_FIELD_KEY]: "[email protected]",
first_name: "Ada",
company: "Example Inc.",
});
}

API​

isVisible​

Getter that returns true when the main product has an offer configuration whose status is "active".

sendEmail​

Getter that returns whether the offer configuration requires an email to be sent. When true, submit() throws if no email is provided.

formId​

Getter that returns the configured inquiry form id, or null.

formData​

Getter that returns the most recently fetched form resource (ApiFormResourceView), or null until fetchForm() has run.

fetchForm()​

Loads the form resource for the main product's configured form id and stores it on the controller (readable via formData). Resolves to null when no form id is configured.

isBusy​

Getter that returns whether a submit is currently in progress. submit() is a no-op while busy.

subscribeBusy(callback)​

Subscribes to busy-state changes. callback receives the new boolean value. Returns an unsubscribe function.

submit(formValues)​

Submits a quote request. The method:

  1. Resolves the main product's offer configuration (throws "Offer configuration not found" if missing).
  2. Reads the email from formValues[REQUEST_QUOTE_EMAIL_FIELD_KEY] and throws "Email is required" when sendEmail is enabled but no email is present.
  3. Serializes the current configuration and creates a snapshot through the download design service.
  4. Submits to the offer inquiry service with the product offer id, offer configuration id, snapshot id, formData, and email.
  5. Pushes a success message on completion, or an error message and re-throws on failure — both through useMessages(configurator).