<!-- THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -->
<!-- This file is created by the `yarn generate-readme` script. -->

# SelectInput

## Description

An input component getting a selection from the user.

## Installation

```
yarn add @commercetools-uikit/select-input
```

```
npm --save install @commercetools-uikit/select-input
```

Additionally install the peer dependencies (if not present)

```
yarn add react react-dom react-intl
```

```
npm --save install react react-dom react-intl
```

## Usage

```jsx
import PropTypes from 'prop-types';
import SelectInput from '@commercetools-uikit/select-input';

const Example = (props) => (
  <SelectInput
    name="form-field-name"
    value={props.value}
    onChange={
      (/** event */) => {
        // console.log(event.target.value)
      }
    }
    options={[
      { value: 'one', label: 'One' },
      { value: 'two', label: 'Two' },
    ]}
  />
);

Example.propTypes = {
  value: PropTypes.string,
};

export default Example;
```

## Properties

| Props                      | Type                                                                                                     | Required | Default     | Description                                                                                                                                                                                                                                                                                                                                                                              |
| -------------------------- | -------------------------------------------------------------------------------------------------------- | :------: | ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `appearance`               | `union`<br/>Possible values:<br/>`'default' , 'quiet' , 'filter'`                                        |          | `'default'` | Indicates the appearance of the input.&#xA;`quiet` appearance is meant to be used with the `horizontalConstraint="auto"`.&#xA;`filter` appearance provides a different look and feel for the select input when it is used as part of a filter component.                                                                                                                                 |
| `horizontalConstraint`     | `union`<br/>Possible values:<br/>`, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 'scale', 'auto'`    |          |             |                                                                                                                                                                                                                                                                                                                                                                                          |
| `hasError`                 | `boolean`                                                                                                |          |             | Indicates that input has errors                                                                                                                                                                                                                                                                                                                                                          |
| `isReadOnly`               | `boolean`                                                                                                |          |             | Is the select read-only                                                                                                                                                                                                                                                                                                                                                                  |
| `hasWarning`               | `boolean`                                                                                                |          |             | Control to indicate on the input if there are selected values that are potentially invalid                                                                                                                                                                                                                                                                                               |
| `iconLeft`                 | `ReactNode`                                                                                              |          |             | Icon to display on the left of the placeholder text and selected value. Has no effect when isMulti is enabled.                                                                                                                                                                                                                                                                           |
| `aria-label`               | `ReactSelectProps['aria-label']`                                                                         |          |             | Aria label (for assistive tech)&#xA;<br>&#xA;[Props from React select was used](https://react-select.com/props)                                                                                                                                                                                                                                                                          |
| `aria-labelledby`          | `ReactSelectProps['aria-labelledby']`                                                                    |          |             | HTML ID of an element that should be used as the label (for assistive tech)&#xA;<br>&#xA;[Props from React select was used](https://react-select.com/props)                                                                                                                                                                                                                              |
| `aria-invalid`             | `ReactSelectProps['aria-invalid']`                                                                       |          |             | Indicate if the value entered in the input is invalid.&#xA;<br>&#xA;[Props from React select was used](https://react-select.com/props)                                                                                                                                                                                                                                                   |
| `aria-errormessage`        | `ReactSelectProps['aria-errormessage']`                                                                  |          |             | HTML ID of an element containing an error message related to the input.&#xA;<br>&#xA;[Props from React select was used](https://react-select.com/props)                                                                                                                                                                                                                                  |
| `isAutofocussed`           | `boolean`                                                                                                |          |             | Focus the control when it is mounted                                                                                                                                                                                                                                                                                                                                                     |
| `backspaceRemovesValue`    | `ReactSelectProps['backspaceRemovesValue']`                                                              |          |             | Remove the currently focused option when the user presses backspace&#xA;<br>&#xA;[Props from React select was used](https://react-select.com/props)                                                                                                                                                                                                                                      |
| `components`               | `ReactSelectProps['components']`                                                                         |          |             | Map of components to overwrite the default ones, see what components you can override&#xA;<br>&#xA;[Props from React select was used](https://react-select.com/props)                                                                                                                                                                                                                    |
| `isCondensed`              | `boolean`                                                                                                |          |             | Whether the input and options are rendered with condensed paddings                                                                                                                                                                                                                                                                                                                       |
| `controlShouldRenderValue` | `ReactSelectProps['controlShouldRenderValue']`                                                           |          |             | Control whether the selected values should be rendered in the control&#xA;<br>&#xA;[Props from React select was used](https://react-select.com/props)                                                                                                                                                                                                                                    |
| `filterOption`             | `ReactSelectProps['filterOption']`                                                                       |          |             | Custom method to filter whether an option should be displayed in the menu&#xA;<br>&#xA;[Props from React select was used](https://react-select.com/props)                                                                                                                                                                                                                                |
| `hideSelectedOptions`      | `ReactSelectProps['hideSelectedOptions']`                                                                |          |             | Custom method to determine whether selected options should be displayed in the menu&#xA;<br>&#xA;[Props from React select was used](https://react-select.com/props)                                                                                                                                                                                                                      |
| `id`                       | `ReactSelectProps['inputId']`                                                                            |          |             | Used as HTML id property. An id is generated automatically when not provided.&#xA;This forwarded as react-select's "inputId"&#xA;<br>&#xA;[Props from React select was used](https://react-select.com/props)                                                                                                                                                                             |
| `inputValue`               | `ReactSelectProps['inputValue']`                                                                         |          |             | The value of the search input&#xA;<br>&#xA;[Props from React select was used](https://react-select.com/props)                                                                                                                                                                                                                                                                            |
| `containerId`              | `ReactSelectProps['id']`                                                                                 |          |             | The id to set on the SelectContainer component&#xA;This is forwarded as react-select's "id"&#xA;<br>&#xA;[Props from React select was used](https://react-select.com/props)                                                                                                                                                                                                              |
| `isClearable`              | `ReactSelectProps['isClearable']`                                                                        |          |             | Is the select value clearable&#xA;<br>&#xA;[Props from React select was used](https://react-select.com/props)                                                                                                                                                                                                                                                                            |
| `isDisabled`               | `ReactSelectProps['isDisabled']`                                                                         |          |             | Is the select disabled&#xA;<br>&#xA;[Props from React select was used](https://react-select.com/props)                                                                                                                                                                                                                                                                                   |
| `isOptionDisabled`         | `ReactSelectProps['isOptionDisabled']`                                                                   |          |             | Override the built-in logic to detect whether an option is disabled&#xA;<br>&#xA;[Props from React select was used](https://react-select.com/props)                                                                                                                                                                                                                                      |
| `isMulti`                  | `ReactSelectProps['isMulti']`                                                                            |          |             | Support multiple selected options&#xA;<br>&#xA;[Props from React select was used](https://react-select.com/props)                                                                                                                                                                                                                                                                        |
| `isSearchable`             | `ReactSelectProps['isSearchable']`                                                                       |          |             | Whether to enable search functionality&#xA;<br>&#xA;[Props from React select was used](https://react-select.com/props)                                                                                                                                                                                                                                                                   |
| `menuIsOpen`               | `ReactSelectProps['menuIsOpen']`                                                                         |          |             | Can be used to enforce the select input to be opened&#xA;<br>&#xA;[Props from React select was used](https://react-select.com/props)                                                                                                                                                                                                                                                     |
| `maxMenuHeight`            | `ReactSelectProps['maxMenuHeight']`                                                                      |          | `220`       | Maximum height of the menu before scrolling&#xA;<br>&#xA;[Props from React select was used](https://react-select.com/props)                                                                                                                                                                                                                                                              |
| `menuPortalTarget`         | `ReactSelectProps['menuPortalTarget']`                                                                   |          |             | Dom element to portal the select menu to&#xA;<br>&#xA;[Props from React select was used](https://react-select.com/props)                                                                                                                                                                                                                                                                 |
| `menuPortalZIndex`         | `number`                                                                                                 |          | `1`         | z-index value for the menu portal&#xA;<br>&#xA;Use in conjunction with `menuPortalTarget`                                                                                                                                                                                                                                                                                                |
| `menuShouldBlockScroll`    | `ReactSelectProps['menuShouldBlockScroll']`                                                              |          |             | whether the menu should block scroll while open&#xA;<br>&#xA;[Props from React select was used](https://react-select.com/props)                                                                                                                                                                                                                                                          |
| `closeMenuOnSelect`        | `ReactSelectProps['closeMenuOnSelect']`                                                                  |          |             | Whether the menu should close after a value is selected. Defaults to `true`.&#xA;<br>&#xA;[Props from React select was used](https://react-select.com/props)                                                                                                                                                                                                                             |
| `name`                     | `ReactSelectProps['name']`                                                                               |          |             | Name of the HTML Input (optional - without this, no input will be rendered)&#xA;<br>&#xA;[Props from React select was used](https://react-select.com/props)                                                                                                                                                                                                                              |
| `noOptionsMessage`         | `ReactSelectProps['noOptionsMessage']`                                                                   |          |             | Can be used to render a custom value when there are no options (either because of no search results, or all options have been used, or there were none in the first place). Gets called with { inputValue: String }.&#xA;<br />&#xA;`inputValue` will be an empty string when no search text is present.&#xA;<br>&#xA;[Props from React select was used](https://react-select.com/props) |
| `onBlur`                   | `Function`<br/>[See signature.](#signature-onblur)                                                       |          |             | Handle blur events on the control                                                                                                                                                                                                                                                                                                                                                        |
| `onChange`                 | `Function`<br/>[See signature.](#signature-onchange)                                                     |          |             | Called with a fake event when value changes. The event's target.name will be the name supplied in props. The event's target.value will hold the value.&#xA;<br/>&#xA;The value will be the selected option, or an array of options in case isMulti is true.                                                                                                                              |
| `onFocus`                  | `ReactSelectProps['onFocus']`                                                                            |          |             | Handle focus events on the control&#xA;<br>&#xA;[Props from React select was used](https://react-select.com/props)                                                                                                                                                                                                                                                                       |
| `onInputChange`            | `ReactSelectProps['onInputChange']`                                                                      |          |             | Handle change events on the input&#xA;<br>&#xA;[Props from React select was used](https://react-select.com/props)                                                                                                                                                                                                                                                                        |
| `options`                  | `union`<br/>Possible values:<br/>`TOption[] , TOptionObject[]`                                           |          | `[]`        | Array of options that populate the select menu                                                                                                                                                                                                                                                                                                                                           |
| `optionStyle`              | `union`<br/>Possible values:<br/>`'list' , 'checkbox'`                                                   |          | `'list'`    | defines how options are rendered                                                                                                                                                                                                                                                                                                                                                         |
| `showOptionGroupDivider`   | `boolean`                                                                                                |          |             |                                                                                                                                                                                                                                                                                                                                                                                          |
| `placeholder`              | `ReactSelectProps['placeholder']`                                                                        |          |             | Placeholder text for the select value&#xA;<br>&#xA;[Props from React select was used](https://react-select.com/props)                                                                                                                                                                                                                                                                    |
| `tabIndex`                 | `ReactSelectProps['tabIndex']`                                                                           |          |             | Sets the tabIndex attribute on the input&#xA;<br>&#xA;[Props from React select was used](https://react-select.com/props)                                                                                                                                                                                                                                                                 |
| `tabSelectsValue`          | `ReactSelectProps['tabSelectsValue']`                                                                    |          |             | Select the currently focused option when the user presses tab&#xA;<br>&#xA;[Props from React select was used](https://react-select.com/props)                                                                                                                                                                                                                                            |
| `value`                    | `ReactSelectProps['value']`                                                                              |          |             | The value of the select; reflected by the selected option&#xA;<br>&#xA;[Props from React select was used](https://react-select.com/props)                                                                                                                                                                                                                                                |
| `minMenuWidth`             | `union`<br/>Possible values:<br/>`, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 'scale', 'auto'` |          |             | The min width (a range of values from the horizontalConrtaint set of values) for which the select-input menu&#xA;is allowed to shrink. If unset, the menu will shrink to a default value.                                                                                                                                                                                                |
| `maxMenuWidth`             | `union`<br/>Possible values:<br/>`, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 'scale', 'auto'`       |          |             | The max width (a range of values from the horizontalConrtaint set of values) for which the select-input menu&#xA;is allowed to grow. If unset, the menu will grow horrizontally to fill its parent.                                                                                                                                                                                      |
| `count`                    | `number`                                                                                                 |          |             | An additional value displayed on the select options menu. This value is only available in the checkbox option style when appearance is set to filter.                                                                                                                                                                                                                                    |

## Signatures

### Signature `onBlur`

```ts
(event: TCustomEvent) => void
```

### Signature `onChange`

```ts
(event: TCustomEvent) => void
```

## `react-select` under the hood

This input is built on top of [`react-select`](https://github.com/JedWatson/react-select) v2.
It supports mostly same properties as `react-select`. Behaviour for some props was changed, and support for others was dropped.

In case you need one of the currently excluded props, feel free to open a PR adding them.

## `options`

The options support a `isDisabled` property which will render the option with a disabled style and will prevent users from selecting it.

## Static Properties

### `isTouched(touched)`

Returns truthy value for the Formik `touched` value of this input field.

## Components

It is possible to customize `SelectInput` by passing the `components` property.
`SelectInput` exports the default underlying components as static exports.

Components available as static exports are:

- `ClearIndicator`
- `Control`
- `CrossIcon`
- `DownChevron`
- `DropdownIndicator`
- `Group`
- `GroupHeading`
- `IndicatorsContainer`
- `IndicatorSeparator`
- `Input`
- `LoadingIndicator`
- `LoadingMessage`
- `Menu`
- `MenuList`
- `MenuPortal`
- `MultiValue`
- `MultiValueContainer`
- `MultiValueLabel`
- `MultiValueRemove`
- `NoOptionsMessage`
- `Option`
- `Placeholder`
- `SelectContainer`
- `SingleValue`
- `ValueContainer`

See the [official documentation](https://react-select.com/components) for more information about the props they receive.
