react-select
I @midas-ds/components finns komponenterna Select och ComboBox
där användaren kan kan klicka eller söka fram ett val. Select stödjer flerval, ComboBox gör det ej för närvarande.
Ett annat populärt bibliotek som kombinerar dessa mönster är react-select. Tack vare sitt API kan samma komponent leverera snarlik funktionalitet som komponenter i Midas och dessutom t.ex. flerval för ComboBox.
Stilarna för react-select är just nu i en tidig version och är ett arbete som pågår. react-select är inte en del av kärnbiblioteket i Midas, vilket innebär att supporten är begränsad. Vi är öppna för kodbidrag till vårt repo och tar gärna emot förslag på stilar som saknas när du implementerar react-select.
När du ska använda react-select
- Flerval kombinerat med sökbarhet (ComboBox med flerval)
Komma igång
För att använda react-select med Midas-stilar måste du först installera de nödvändiga beroendena:
npm install @midas-ds/select-styles react-select
Importera sedan Midas-stilarna för react-select:
@import '@midas-ds/select-styles/react-select.css';
Använd åtminstone följande props:
<Select
className='select'
classNamePrefix='midas'
unstyled
/>
Exempel
ComboBox med flerval
Följande exempel visar hur du kan använda react-select för att sätta upp en komponent som efterliknar ComboBox med flerval.
import Select, { CSSObjectWithLabel, MultiValueProps } from 'react-select'
import { Label, Text } from '@midas-ds/components'
import { variables } from '@midas-ds/theme'
import '@midas-ds/select-styles/lib/react-select.css'
<div style={{ display: 'flex', flexDirection: 'column' }}>
<Label htmlFor='employee'>Select employee</Label>
<Text slot='description'>Employees from all departments</Text>
<Select
className='select'
classNamePrefix='midas'
closeMenuOnSelect={false}
hideSelectedOptions={false}
inputId='employee'
isMulti
isSearchable
noOptionsMessage={() => 'No match'}
options={[
{ value: '0', label: 'Anna Andersson' },
{ value: '1', label: 'Erik Eriksson' },
// ...
]}
placeholder='Select an employee'
styles={{
multiValue: (provided: CSSObjectWithLabel, { isFocused }: MultiValueProps) => ({
...provided,
boxShadow: isFocused ? variables.stateFocus : undefined,
}),
}}
unstyled
/>
</div>