Select Field
A dropdown list for selecting a single item. The SelectField
component extends
the Select
element with description and validation variants.
Usage
import { SelectField } from "@newfold/ui-component-library";
<SelectField
id="select-field-demo"
label="A select field"
value="1"
selectedLabel="Option 1"
onChange={handleChange}
>
<SelectField.Option
label="Option 1"
value="1"
/>
<SelectField.Option
label="Option 2"
value="2"
/>
<SelectField.Option
label="Option 3"
value="3"
/>
<SelectField.Option
label="Option 4"
value="4"
/>
</SelectField>
Options
You can pass options to the component in two ways. You can pass them as children of the component or you can pass them as an array of objects to the options prop.
1. Options as Children
You can pass options as children to the component. Each child must be an instance of SelectField.Option
sub-component.
In this case changing the selectedLabel
should be done manually in the handleChange
function.
const [selectedVal, setSelectedVal] = useState("1");
const handleChange = (val) => {
setSelectedVal(val);
};
<SelectField
id='select-field-children'
label = "A select field"
value={selectedVal}
selectedLabel={`Option ${selectedVal}`}
onChange={handleChange}
>
<SelectField.Option
label="Option 1"
value="1"
/>
<SelectField.Option
label="Option 2"
value="2"
/>
<SelectField.Option
label="Option 3"
value="3"
/>
<SelectField.Option
label="Option 4"
value="4"
/>
</SelectField>
2. Options as Array
Use the options
prop to pass in the options as an array of objects.
In this case, displayed selectedLabel
will be updated automatically on change.
const [selectedVal, setSelectedVal] = useState("1");
const handleChange = (val) => {
setSelectedVal(val);
};
<SelectField
id='select-field-array'
label = "A select field"
value={selectedVal}
onChange={handleChange}
options={[
{
label: 'Option 1',
value: '1'
},
{
label: 'Option 2',
value: '2'
},
{
label: 'Option 3',
value: '3'
},
{
label: 'Option 4',
value: '4'
}
]}
/>
Label
Use the label
prop to add a label to the SelectField
component.
<SelectField
id="select-field-label"
label="This is a label"
value="1"
selectedLabel="Option 1"
onChange={handleChange}
>
<SelectField.Option
label="Option 1"
value="1"
/>
<SelectField.Option
label="Option 2"
value="2"
/>
<SelectField.Option
label="Option 3"
value="3"
/>
<SelectField.Option
label="Option 4"
value="4"
/>
</SelectField>
Description
Use the description
prop to add a description to the SelectField
component.
<SelectField
id="select-field-description"
label="A select field"
description="This is a description"
value="1"
selectedLabel="Option 1"
onChange={handleChange}
>
<SelectField.Option
label="Option 1"
value="1"
/>
<SelectField.Option
label="Option 2"
value="2"
/>
<SelectField.Option
label="Option 3"
value="3"
/>
<SelectField.Option
label="Option 4"
value="4"
/>
</SelectField>
Disabled
Use the disabled
prop to disable the SelectField
component.
<SelectField
id="select-field-disabled"
label="A disabled select field"
value="1"
selectedLabel="Option 1"
onChange={handleChange}
disabled={true}
>
<SelectField.Option
label="Option 1"
value="1"
/>
<SelectField.Option
label="Option 2"
value="2"
/>
<SelectField.Option
label="Option 3"
value="3"
/>
<SelectField.Option
label="Option 4"
value="4"
/>
</SelectField>
Validation
Use the validation
prop to add validation to the SelectField
component.
The SelectField
provides four validation variants: success
, warning
, info
, and error
.
Success
<SelectField
id='select-field-success'
value='1'
selectedLabel='Option 1'
label="Success variant"
onChange={handleChange}
validation={{
variant: "success",
message: "Success unlocked. Keep soaring!"
}}
>
<SelectField.Option
label="Option 1"
value="1"
/>
<SelectField.Option
label="Option 2"
value="2"
/>
<SelectField.Option
label="Option 3"
value="3"
/>
<SelectField.Option
label="Option 4"
value="4"
/>
</SelectField>
Warning
<SelectField
id='select-field-warning'
value='1'
selectedLabel='Option 1'
label="Warning variant"
onChange={handleChange}
validation={{
variant: "warning",
message: "Caution: Proceed with care to avoid potential pitfalls."
}}
>
<SelectField.Option
label="Option 1"
value="1"
/>
<SelectField.Option
label="Option 2"
value="2"
/>
<SelectField.Option
label="Option 3"
value="3"
/>
<SelectField.Option
label="Option 4"
value="4"
/>
</SelectField>
Info
<SelectField
id='select-field-info'
value='1'
selectedLabel='Option 1'
label="Info variant"
onChange={handleChange}
validation={{
variant: "info",
message: "Information: Knowledge is the key to empowerment."
}}
>
<SelectField.Option
label="Option 1"
value="1"
/>
<SelectField.Option
label="Option 2"
value="2"
/>
<SelectField.Option
label="Option 3"
value="3"
/>
<SelectField.Option
label="Option 4"
value="4"
/>
</SelectField>
Error
<SelectField
id='select-field-error'
value='1'
selectedLabel='Option 1'
label="Error variant"
onChange={handleChange}
validation={{
variant: "error",
message: "Error: Unable to proceed without required input."
}}
>
<SelectField.Option
label="Option 1"
value="1"
/>
<SelectField.Option
label="Option 2"
value="2"
/>
<SelectField.Option
label="Option 3"
value="3"
/>
<SelectField.Option
label="Option 4"
value="4"
/>
</SelectField>
Props
Attribute | Type | Description | Default |
---|---|---|---|
id* | string | | - | - |
value* | string | number | bool | | - | - |
label* | string | | - | - |
selectedLabel | string | | - | - |
name | string | | - | - |
description | node | | - | - |
options | [{ value: string | number | bool, label: string }] | | Array of options to be rendered in the select field. | - |
children | node | | Alternative to options array. Pass `SelectField.Option` components as children. | - |
validation | { variant: string, message: node } | | Validation state and message | - |
disabled | bool | | - | false |
className | string | | - | - |