<vega-combo-box
required=true
label="label text"
id="my-combo-box"
>
</vega-combo-box>
const comboBox = document.getElementById('my-combo-box');
comboBox.source = [
{ key: 'key1', label: 'option 1' },
{ key: 'key2', label: 'option 2' },
{ key: 'key3', label: 'option 3' },
];
<vega-combo-box
required=true
label="label text"
id="my-combo-box"
>
</vega-combo-box>
const comboBox = document.getElementById('my-combo-box');
comboBox.source = [
{ key: 'key1', label: 'option 1' },
{ key: 'key2', label: 'option 2' },
{ key: 'key3', label: 'option 3' },
];
comboBox.vegaDropdownProps = {
dynamicOption : true
}
comboBox.addEventListener('vegaCreate', (e) => {
comboBox.source.push({key: e.detail, label: e.detail});
comboBox.value = [...comboBox.value, e.detail]
})
The combo box is similar to an input field, but allows inclusion of chips within the field. It mimics the select box for dropdown items, but will allow selecting and adding multiple chips.
These are ideally used when there is a need for multiple entries to show as chosen within an input. A common use case might be an email “to” field.
As shown in the second example above, it is possible to allow users to create new chips for the Combo Box.
| Name | Description | Default |
|---|---|---|
| required | Indicates whether or not the vega-combo-box is required. boolean | false |
| label | Sets the default label text for the vega-combo-box. string | "" |
| value | The value of this vega-combo-box. Set this value as a array, like [key1, key2] |
[] |
| source | The data source of the vega-combo-box Array<{key: 'string', label: 'string'}> |
[] |
| disabled | Indicates if the vega-combo-box is disabled. boolean | false |
| placeholder | A placeholder string indicating the input format. string | - |
| auto-validation | Indicator for whether to automatically validate the user’s input. boolean | true |
| hint | A hint message. string | |
| size | The component contains two sizes: small, medium |
medium |
| vega-dropdown-props | Partial properties of vega-dropdown components, includes positionRelativeTo | maxHeight | matchContainerHeight | dynamicOption |
{ maxHeight: 400, matchContainerHeight: false, createable: false, } |
| validation-rules | The array Custom validation rule for attaching to the input takes the following format: Array<{canEvaluate: (input: string, status: FormFieldStatusMeta, statusChanged: (keyof FormFieldStatusMeta)[]) => boolean, shouldShowError: (status: FormFieldStatusMeta, statusChanged: (keyof FormFieldStatusMeta)[]) => boolean, evaluate: (input: string) => EvaluateResult}> |
<vega-combo-box
required=true|false
label='string'
value='array of item keys: [key1, key2...]'
auto-validation=true|false
validation-rules='Rules'
disabled=true|false
placeholder='string'
hint='string'
size='small|medium'
source='array of items: [{key: key1, label: label1}, {key: key2, label: label2}...]'
vega-dropdown-props: {
maxHeight: 'number',
matchContainerHeight: true|false,
positionRelativeTo: 'selector of scroll container',
dynamicOption: true|false,
isLoading: true|false,
},
use-default-filter=true|false
>
</vega-combo-box>
To have the vega-combo-box create a new item, set vegaDropdownProps.dynamicOption as true. When searching for an item, if no match is found, the text “Add {search string}” will display. Clicking on this text will emit a vegaCreate event with the search string as the parameter.
While receiving this event, you can generate a key and create it as a DropdownSourceItem and you may also set it as a source, and push the key to a value.
Note: When pushing a new item to the array or to change the value, it is important to use a new array with the new item, or the UI will not update.
Example:
<VegaComboBox
source={this.source}
value={this.value}
onVegaCreate={ (e) => {
const key = "You should generate key by backend or other ways";
this.source = [...this.source, {
key: key,
label: e.detail
}];
this.value = [...this.value, key];
}}
...
></VegaComboBox>
When the value of vega-combo-box is changed, it dispatches the vegaChange event.
document.getElementById("my-combo-box").addEventListener("vegaChange", (e) => {
console.log(e.currentTarget.value) })
When the validation result of vega-combo-box is changed, it will dispatch the vegaValidate event.
document.getElementById("my-combo-box").addEventListener("vegaValidate", (e) => {
console.log(e.currentTarget.isValid) })
When dynamicOption is set to true and an item is added in the dropdown, it will dispatch the vegaCreate event.
document.getElementById("my-combo-box").addEventListener("vegaCreate", (e) => { console.log(e.detail) })
When userDefaultFilter is false and type the search input, the event of vegaSearch will be dispatched.
document.getElementById("my-combo-box").addEventListener("vegaSearch", (e) => { console.log(e.detail) });
For more details (including examples in React and Vue), view in Storybook
Use the combo box whenever there are instances where you want users to be able to select multiple items from a list but where these choices should be finite. Follow the same guidelines provided for chips.