selectly v0.5.0
Selectly
Build custom select menus in React. Provides a low level way to build the select menu you need.
Install
npm install selectly --save
bower install selectly --save
Example Usage
import { Select, Trigger, OptionList, Option, utils } from 'Selectly'
const { getToggledValues } = utils
class MultiSelect extends Component {
constructor(props) {
super(props)
this.state = {
defaultValue: 'Select a color',
currentValues: []
}
}
_handleChange(value) {
this.setState({
currentValues: getToggledValues(this.state.currentValues, value)
})
}
render() {
const { defaultValue, currentValues } = this.state
return (
<Select
multiple
onChange={value => this._handleChange(value)}
>
<Trigger>
{ currentValues.length > 0
? currentValues.join(', ')
: defaultValue
}
</Trigger>
<OptionList tag="ul" className="react-select-menu">
<Option value="red">Red</Option>
<Option value="green">Green</Option>
<Option value="blue">Blue</Option>
</OptionList>
</Select>
)
}
}
Select Props
children
: PropTypes.node.isRequired (Accepts 2 children)
The first child is used as the trigger
and the second child is used as the options
that will be displayed upon clicking the trigger.
multiple
: PropTypes.bool
When true
this allows multiple options to be selected.
disabled
: PropTypes.bool
Puts the select menu in a disabled state.
autoWidth
: PropTypes.bool
Determines if the options
should be the same width as the trigger
.
onChange
: PropTypes.func
Callback when an option has been selected. Passes back the value that was selected.
React ARIA Components
Trigger
, OptionList
, and Option
are exported directly from React ARIA
Utilities
buildOptionsLookup
: (array options)
Returns a flat object to allow optgroup options to be accessed easier.
[
{ label: 'Dogs', optgroup: [
{ value: 'frenchy', label: 'French Bulldog' },
{ value: 'pit-bull', label: 'Pit Bull' }
]},
{ label: 'Cats', optgroup: [
{ value: 'munchkin', label: 'Munchkin' },
{ value: 'persian', label: 'Persian' }
]}
]
turns into
{
'frenchy': { value: 'frenchy', label: 'French Bulldog' },
'pit-bull': { value: 'pit-bull', label: 'Pit Bull' },
'munchkin': { value: 'munchkin', label: 'Munchkin' },
'persian': { value: 'persian', label: 'Persian' }
}
getAllValues
: (object options)
Returns an array of all option values.
getToggledValues
: (object prevValues, array, string nextValues)
Returns a new array of values either added or removed.
getCurrentOptions
: (object options, array, string currentValue)
Returns an array of the current option or options.
isOptionSelected
: (array, string currentValue, string value)
Determines if value
exists in or matches currentValue
. Returns true
or false
.
Run Example
clone repo
git clone git@github.com:souporserious/selectly.git
move into folder
cd ~/selectly
install dependencies
npm install
run dev mode
npm run dev
open your browser and visit: http://localhost:8080/