S

useHiddenFieldResolvers

Resolves hidden field values at form mount — timestamps, URLs, IP addresses, and UTM parameters.

useHiddenFieldResolvers

Resolves all hidden field values when the form mounts. Filters fields with type: 'hidden', runs their resolvers in parallel, and sets the values via react-hook-form’s setValue.

You probably don’t need this directly. The <Form /> component calls it internally. Use it only when building a custom form renderer that needs to support hidden fields.


Signature

import { useHiddenFieldResolvers } from '@saastro/forms';

useHiddenFieldResolvers(methods, fields);

Parameters

ParameterTypeRequiredDescription
methodsUseFormReturn<Record<string, unknown>>Yesreact-hook-form instance from useForm()
fieldsFieldsYesForm field configurations from config.fields

Return Value

This hook returns void. It operates as a side-effect only — setting hidden field values via methods.setValue().


How It Works

  1. On mount, filters all fields where type === 'hidden'
  2. Runs all resolvers concurrently via Promise.all and resolveValue()
  3. Sets each value with setValue(name, value, { shouldDirty: false })
  4. Cleanup function prevents stale writes if the component unmounts before resolvers complete

Most resolvers execute synchronously (timestamp, hostname, pageUrl, referrer, userAgent, urlParam). The ip resolver uses fetch and is async. All run concurrently regardless.


Example

import { useHiddenFieldResolvers } from '@saastro/forms';
import { useForm } from 'react-hook-form';

function CustomFormRenderer({ config }) {
  const methods = useForm({ defaultValues: {} });

  // Resolves hidden field values on mount
  useHiddenFieldResolvers(methods, config.fields);

  return (
    <form onSubmit={methods.handleSubmit(onSubmit)}>
      {/* Render visible fields... */}
      {/* Hidden fields are invisible but their values are in form state */}
    </form>
  );
}

Built-in Resolvers

ResolverAsyncOutput
timestampNoISO 8601 string
hostnameNowindow.location.hostname
pageUrlNowindow.location.href
referrerNodocument.referrer
userAgentNonavigator.userAgent
urlParamNoURL query parameter value
ipYesVisitor IP via external API