Skip to main content

SelectV2

The SelectV2 component allows you to choose one or multiple options from a collapsed dropdown with options.

Import

import { SelectV2 } from '@dynatrace/strato-components-preview/forms';

Use cases

CodeSandbox

Use multiple selection

The SelectV2 supports multiple selection. You can enable that by adding the multiple prop. If enabled, the "Select all" option gets added automatically.

CodeSandbox

Group options together

You can use the SelectV2.Groups to group more options in the same group.

CodeSandbox

Control the state

The SelectV2 can also be controlled, meaning that you can handle the selection state. To do so, you need to use the onChange prop to provide a handler that is called when the internal state changes. That state can be modified and is applied as soon as it's passed to the value prop.

CodeSandbox

Show a custom placeholder

You can use the SelectV2.Trigger component to show a placeholder for the trigger button by adding the placeholder prop. If no option is selected, the placeholder value is shown by default. Notice that the clearable prop is used here to enable empty selection.

CodeSandbox

Show a custom display value

You can use the SelectV2.DisplayValue component to customize what is rendered on the trigger. By default, the placeholder is shown when no option is selected. You can also render content inside a SelectV2.Prefix component to show an icon in front of the trigger display value for example. When you select a value, the content inside the SelectV2.DisplayValue slot is then rendered inside the trigger.

CodeSandbox

Customize the trigger

You can use the SelectV2.CustomTrigger component to render custom content inside the trigger slot, so you can control the styling or its rendered text.

Note

As the SelectV2 component renders a hidden input inside the trigger for forms integration, if you're using an interactive element (e.g. a <button>) as trigger, you would run into accessibility issues due to nesting interactive items. Therefore, you would need to polymorph it to a non-interactive element (e.g. a <div>) and take care of the focus styling yourself. To do so, you can use the useFocusRing utility and pass it the focusWithin option, which returns the necessary focus styles if an embedded element gains the focus. See the useFocusRing documentation for more details.

CodeSandbox

Disable options

In the SelectV2, you can disable each option separately by adding the disabled prop on the SelectV2.Option component. Otherwise, if you need to disable the whole SelectV2 component, you can add the disabled prop directly.

CodeSandbox

Make the selection clearable

In a single select, the clearable prop adds a button to the overlay when an option is selected to allow users to deselect the option. By default, clearable is set to false for the single select and true if multiple selection is enabled. For the multi-select, an option is added to select or deselect all options.

CodeSandbox

Filter options

You can search through options by adding the SelectV2.Filter component. This renders a search input, where you can type the filtering term and filter the options on the client-side. If no options are found after filtering, you can also customize the shown message by adding content to the SelectV2.EmptyState component, which is only valid within the SelectV2.Content element. Otherwise, the default message is shown: "No items found.".

CodeSandbox

Control the filtering of the options

You can also control the filtering of the options by adding the value and the onFilterChange props on the SelectV2.Filter component.

CodeSandbox

Filter complex options

If you're using a custom component as SelectV2.Option, the text value of this option can't be determined automatically. To enable the filtering of these options and to show which option is selected, you need to provide a textValue with a string representation of the SelectV2.Option.

CodeSandbox

Add icons to options

The SelectV2.SelectOption component allows adding icons in front of the option node with the SelectV2.Prefix or after it with the SelectV2.Suffix. The same can be done to add prefix and suffix icons inside the SelectV2.DisplayValue slot, as shown above.

CodeSandbox

Show the loading state

You can show the loading state of the SelectV2.Option components by adding the loading prop to the SelectV2.Content component.

CodeSandbox

Set the width of the trigger

You can set the width of the trigger by adding the width prop on the SelectV2.Trigger component and either giving it a fixed value or setting it to full, which would adjust it to the width of its container. By default, it's set to content, so it adjusts to the width of the trigger content.

CodeSandbox

Set the width of the content

You can set the width of the content by adding the width prop on the SelectV2.Content component and giving it a fixed value. By default, it has a min-width of 96px and adjusts to the size of the trigger. If the text of the options is overflowing, the text is truncated at the end by default. However, you can also add the TextEllipsis component directly inside the SelectV2.Option and wrap the text inside it to set the truncation to the start or middle, if necessary. See the TextEllipsis documentation for more details.

CodeSandbox

Pass large amounts of data

The SelectV2 can handle large amounts of options. If the content is too large to fit, the select options are virtualized.

CodeSandbox

Show selected options first

In the SelectV2, you can use the showSelectedOptionsFirst prop to configure whether the options should be reordered to show the selected options at the top. If this is set to true the options will be reordered when the overlay is closed and opened again. For elected options inside an SelectV2.Group, this will position its group at the top, as well as order the option to the top within the group.

CodeSandbox

Validate

This example shows how you can validate the SelectV2 using the react-hook-form package, which handles error messages. For connecting the form with the SelectV2 and validating, you need to register the field with custom error messages and use the useForm hook from react-hook-form. Also, by using the controlState prop, you can override the error messages and connect the SelectV2's error state and message to that of the form. This shows a hint in case of an error and applies proper styling to the component. You can also add custom validation logic when registering the SelectV2 by passing in a validate function to the register options.

CodeSandbox

React to open state changes

In the SelectV2 you can react to changes to the open state using the onOpenChange prop. This prop expects a callback method which receives the new open state as a single boolean argument.

CodeSandbox
Still have questions?
Find answers in the Dynatrace Community