<OptionRoot>, <OptionGroup>, and <Option>







The <Select>, <Radios> and <Checkboxes> share the same option components.
This makes it easy to change. If you used <Radios> but then decided to allow multiple
selections it would be easy to swap to <Checkboxes>.
Intro
The multichoice <Select> and <Radios> and <Checkboxes> must only have a single child component of <OptionRoot>.
The <OptionRoot> may contain multiple <OptionGroup>s and <Option>s.
The <OptionGroup> may only contain multiple <Option>s, but no other component.
<OptionRoot>
The first and only child of <Select>, <Radios> or <Checkboxes> must be a single <OptionRoot>.
<OptionRoot> takes no props.
Valid children of <OptionRoot> are <OptionGroup>s and <Option>s.
Try changing <Select> to <Radios> or <Checkboxes>... the same <Option>s are
shared by these 3 types of multichoice components.
<Select id="myMultichoice"><OptionRoot><OptionGroup id="optionGroup1"><Option id="option1" /></OptionGroup><Option id="option2" /><Option id="option3" /></OptionRoot></Select>
<OptionRoot>'s props
| Prop | About | Type |
|---|---|---|
meta | Arbitrary metadata on this node. This is useful when developing custom controls as it allows you to pass down metadata/extensions. | string |
childrenById | Used to indicate the ids of children. If used in React this is non-editable. | string[] |
hasChildrenById | Non-editable. Used to indicate that this component has children. | true |
id | Non-editable. OptionRoot must be called | "__root" |
isFormField | Non-editable. Used to indicate that this component isn't a form field. (form fields have labels and hints, this doesn't) | false |
type | Non-editable. Type of component of | "OptionRoot" |
<OptionGroup>
<OptionGroup> groups sets of <Option>s. It cannot group any other component,
including itself. This means that <OptionGroup> may only be top-level, and
the grouping can only be one-level deep.
This component may only be used as a child of <OptionRoot>, and may not be nested.
The only valid children are <Option>s.
In a <Select> a <OptionGroup> would be rendered as an <optgroup> (MDN <optgroup>).
In <Checkboxes> and <Radios> this would be rendered as a <fieldset> (MDN <fieldset>).
Note: the hintHtml prop may be ignored when this multichoice is used in a <Select>.
The reason for this is that the inbuilt (default) component uses a <Select> which doesn't
have a place for hints. If you need hints in a <Select> then you'll need to override the default
<Select> component, or use a <CustomField>.
Use of <OptionGroup>
<OptionGroup
labelHtml={{ en: 'South Island', mi: 'Te Waipounamu }}
hintHtml={{ en: '' }}
/>
<OptionGroup>'s props
| Prop | About | Type |
|---|---|---|
hintHtml | Localisable HTML: Hint content. Note: If used in a | LocalisedHtml |
labelHtml | Localisable HTML: Option Group title content. Note that HTML might not be available if rendered
as an If a developer requires HTML in a HTML will be used in | LocalisedHtml |
id | Component Id. Must be unique within the form. | string |
meta | Arbitrary metadata on this node. This is useful when developing custom controls as it allows you to pass down metadata/extensions. | string |
childrenById | Used to indicate the ids of children. If used in React this is non-editable. | string[] |
hasChildrenById | Non-editable. Used to indicate that this component has children. | true |
isFormField | Non-editable. Used to indicate that this component is a form field. | true |
type | Non-editable. Type of component of | "OptionGroup" |
<Option>
An option that a user can choose.
In a <Select> this would be rendered as an <option>.
In <Checkboxes> these would be rendered as a checkbox field, and in <Radios> these would be a radio field.
Use of <Option>
<Option
labelHtml={{ en: 'Green' }}
hintHtml={{ en: 'E.g. #00ff00' }}
value="green"
/>
Note: the hintHtml prop may be ignored when this multichoice is used in a <Select>.
The reason for this is that the inbuilt (default) component uses a <Select> which doesn't
have a place for hints. If you need hints in a <Select> then you'll need to override the default
<Select> component, or use a <CustomField>.
<Option>'s props
| Prop | About | Type |
|---|---|---|
hintHtml | Localisable HTML: Hint content. Note: If used in a | LocalisedHtml |
labelHtml | Localisable HTML: Label content. Note: If used in a | LocalisedHtml |
value | The 'value' attribute of the Typically not displayed to the user. | string |
id | Component Id. Must be unique within the form. | string |
meta | Arbitrary metadata on this node. This is useful when developing custom controls as it allows you to pass down metadata/extensions. | string |
hasChildrenById | Non-editable. Used to indicate that this element doesn't have children. | false |
isFormField | Non-editable. Used to indicate that this component is part of a form field. | true |
type | Non-editable. Type of component of | "Option" |