Skip to main content
Form.IntervalFrequency pairs a numeric interval input (e.g. “every N”) with a frequency/unit select (e.g. “days” / “weeks” / “months”) as one bound field. label renders as a single visible legend above both inputs — the interval and frequency inputs each have their own fixed, visually hidden accessible name (“Interval” / “Frequency”) instead of individual visible labels, since a per-input label reads too small next to the legend. It renders both inputs in a two-column grid with a single FieldMessage below them, and binds to an IntervalFrequencyFormState rather than a single field state.

Creating the form state

IntervalFrequencyFormState<G> combines an interval: A2InputFieldState<number | null> with a frequency: SelectableOptionsFieldState<G> into one formstate.FormState. Pass the initial interval and frequency to the constructor, then set the frequency options:
Form.IntervalFrequency does not accept a loadOptions prop — frequency is always a SelectableOptionsFieldState, since a frequency/unit list is a small, static set. setOptions() only feeds frequency’s validationRules tracking; pass the same list through the options prop (forwarded to the underlying SelectFieldSync) so the select renders it.

Reading and validating the combined value

reminderCadence.$.interval and reminderCadence.$.frequency are plain A2InputFieldState/SelectableOptionsFieldState instances — read .value, attach .validators(), and call .validate() on either sub-field individually, or validate the whole form state at once:

Reacting to changes

Register a handler that runs whenever either sub-field changes with onDidChange:

Update mode

Call enableUpdateMode() to add an updateMode: A2InputFieldState<UpdateMode> sub-field for value-update controls (bulk edit flows that need Keep/Replace/Append/Remove/Clear semantics), and disableUpdateMode() to remove it.

Props

Form.IntervalFrequency accepts every SelectFieldSync prop except value, onSelectedOptionChange, error, and warning (those come from formState), and label/hideLabel (the frequency select’s own label is fixed and hidden internally — use the label prop below for the visible legend instead), plus:
Last modified on October 2, 2026