UNPKG

react-native-searchable-dropdown

Version:
270 lines (262 loc) 7.12 kB
[example-url]: https://i.imgur.com/mHGaOX5.gif [screenshot-1]: https://i.imgur.com/OrsBmik.png [screenshot-2]: https://i.imgur.com/yghQDw0.png [npm-badge]: https://img.shields.io/npm/v/react-native-searchable-dropdown.svg?colorB=ff6d00 [npm-url]: https://npmjs.com/package/react-native-searchable-dropdown [license-badge]: https://img.shields.io/npm/l/react-native-searchable-dropdown.svg?colorB=448aff [![npm][npm-badge]][npm-url] ![license][license-badge] # React Native Searchable Dropdown Searchable Dropdown to help you search with in the list (`FlatList`), and you can pick single item and multiple items. ![example][example-url] ![example][screenshot-2] ## Installation ```bash npm install --save react-native-searchable-dropdown ``` ## Properties <table> <tr> <th>Props</th> <th>Description</th> </tr> <tr> <td>items</td> <td>dropdown items</td> </tr> <tr> <td>defaultIndex</td> <td>Default selected index of items. (optional)</td> </tr> <tr> <td>onTextChange</td> <td>on text change you can passs onTextChange and catch the input text. (optional)</td> </tr> <tr> <td>onItemSelect</td> <td>on item selection you can passs onItemSelect and catch the input item. </td> </tr> <tr> <td>containerStyle</td> <td>component container style</td> </tr> <tr> <td>textInputStyle</td> <td>TextInput style</td> </tr> <tr> <td>itemStyle</td> <td>items on dropdown</td> </tr> <tr> <td>itemTextStyle</td> <td>item text</td> </tr> <tr> <td>resetValue</td> <td>reset textInput Value with true and false state</td> </tr> <tr> <td>placeholder</td> <td>textInput placeholder</td> </tr> <tr> <td>placeholderTextColor</td> <td>textInput placeholderTextColor</td> </tr> <tr> <td>itemsContainerStyle</td> <td>items container style you can pass maxHeight to restrict the items dropdown hieght</td> </tr> <tr> <td>underlineColorAndroid</td> <td>TextInput underline height</td> </tr> <tr> <td>listProps</td> <td> all supported (FlatList) props example: listProps={ nestedScrollEnabled: true } </td> <td> </td> <tr> <td>textInputProps</td> <td> all supported (TextInput) props example: textInputProps={ underlineColorAndroid: 'transparent' } </td> </tr> </tr> <tr> <td>setSort</td> <td>filter data on text changing example: setSort={(item, searchedText)=> item.name.toLowerCase().startsWith(searchedText.toLowerCase())}</td> </tr> <tr> <td>multi</td> <td>boolean toggle multi selection</td> </tr> <tr> <td>selectedItems</td> <td>selectedItems of multi selection note: work when if multi prop is true</td> </tr> <tr> <td>chip</td> <td>boolean toggle chip display mode note: work when if multi prop is true</td> </tr> <tr> <td>onRemoveItem</td> <td>{ (item, index) => { } } note: work when if multi prop is true</td> </tr> </table> # Example ```jsx import React, { Component, Fragment } from 'react'; import SearchableDropdown from 'react-native-searchable-dropdown'; var items = [ { id: 1, name: 'JavaScript', }, { id: 2, name: 'Java', }, { id: 3, name: 'Ruby', }, { id: 4, name: 'React Native', }, { id: 5, name: 'PHP', }, { id: 6, name: 'Python', }, { id: 7, name: 'Go', }, { id: 8, name: 'Swift', }, ]; class App extends React.Component { constructor(props) { super(props); this.state = { selectedItems: [ { id: 7, name: 'Go', }, { id: 8, name: 'Swift', } ] } } render() { return ( <Fragment> {/* Multi */} <SearchableDropdown multi={true} selectedItems={this.state.selectedItems} onItemSelect={(item) => { const items = this.state.selectedItems; items.push(item) this.setState({ selectedItems: items }); }} containerStyle={{ padding: 5 }} onRemoveItem={(item, index) => { const items = this.state.selectedItems.filter((sitem) => sitem.id !== item.id); this.setState({ selectedItems: items }); }} itemStyle={{ padding: 10, marginTop: 2, backgroundColor: '#ddd', borderColor: '#bbb', borderWidth: 1, borderRadius: 5, }} itemTextStyle={{ color: '#222' }} itemsContainerStyle={{ maxHeight: 140 }} items={items} defaultIndex={2} chip={true} resetValue={false} textInputProps={ { placeholder: "placeholder", underlineColorAndroid: "transparent", style: { padding: 12, borderWidth: 1, borderColor: '#ccc', borderRadius: 5, }, onTextChange: text => alert(text) } } listProps={ { nestedScrollEnabled: true, } } /> {/* Single */} <SearchableDropdown onItemSelect={(item) => { const items = this.state.selectedItems; items.push(item) this.setState({ selectedItems: items }); }} containerStyle={{ padding: 5 }} onRemoveItem={(item, index) => { const items = this.state.selectedItems.filter((sitem) => sitem.id !== item.id); this.setState({ selectedItems: items }); }} itemStyle={{ padding: 10, marginTop: 2, backgroundColor: '#ddd', borderColor: '#bbb', borderWidth: 1, borderRadius: 5, }} itemTextStyle={{ color: '#222' }} itemsContainerStyle={{ maxHeight: 140 }} items={items} defaultIndex={2} resetValue={false} textInputProps={ { placeholder: "placeholder", underlineColorAndroid: "transparent", style: { padding: 12, borderWidth: 1, borderColor: '#ccc', borderRadius: 5, }, onTextChange: text => alert(text) } } listProps={ { nestedScrollEnabled: true, } } /> </Fragment> ); } } ```