@niku/react-native-dropdown-select
v1.0.1
Published
A Dropdown select component for React Native
Downloads
16
Maintainers
Readme
React Native Dropdown Select
A Dropdown select component for React Native. Easy to use with only one needed configuration.
Demo
Table of contents
Installation
With npm
npm install react-native-safe-area-context @niku/react-native-dropdown-select
With yarn
yarn add react-native-safe-area-context @niku/react-native-dropdown-select
Add SafeAreaProvider
You have to add SafeAreaProvider
at your App's root (App.tsx/App.jsx).
import { SafeAreaProvider } from 'react-native-safe-area-context';
export function App() {
return (
<SafeAreaProvider>
{/* ... */}
</SafeAreaProvider>
);
}
Usage
// ...
import DropdownSelect from 'react-native-dropdown-select';
import { SafeAreaProvider } from 'react-native-safe-area-context';
// ...
const options = [
{
label: "Select language or framework you love",
value: null,
},
{
label: "Languages",
options: [
{
label: 'Javascript',
value: 'js',
},
{
label: 'Typescript',
value: 'ts',
},
{
label: 'Python',
value: 'py',
}
]
},
{
label: "Frameworks - Libraies",
options: [
{
label: 'Reactjs',
value: 'reactjs',
},
{
label: 'React Native',
value: 'react-native',
},
{
label: 'Vuejs',
value: 'vuejs',
},
{
label: "Laravel",
value: "laravel"
}
]
},
{
label: "Others",
value: "others"
}
];
const defaultValue = 'js';
function App() {
const [value, setValue] = React.useState(defaultValue);
return (
<SafeAreaProvider>
<View style={styles.container}>
<View>
<DropdownSelect
options={options}
defaultValue={defaultValue}
value={value}
onSelectOption={(option) => {
setValue(option.value);
}}
onHideDropdown={() => {
console.log('hide');
}}
onShowDropdown={() => {
console.log('show');
}}
/>
</View>
<Text>{value}</Text>
<Button title="Default" onPress={() => setValue(defaultValue)} />
</View>
</SafeAreaProvider>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
alignItems: 'center',
justifyContent: 'center',
padding: 10,
},
});
What's new
There are some new features in this verson.
- Option group: You can group your option. Both option item and option group can be mixed in props
options
(See in Usage above). - withStatusBar: Deprecated. I caculate position of dropdown button with
react-native-safe-area-context
's frame and insets. So, we don't need this props anymore.
Props
| Name | Description | Type | Default | Required |
| ------------------------ | --------------------------------------------------------------------------------------- | ------------------------------------------------ | ----------------------- | -------- |
| options | List of option for dropdown | array
| | Yes |
| defaultValue | Default value to display | any
| | No |
| value | Current value of dropdown select | any
| | No |
| position | Position of dropdown | 'top' | 'bottom'
| 'bottom'
| No |
| placeholder | Placeholder of dropdown select to display when no option selected | string
| 'Select an option...'
| No |
| loading | Loading state of dropdown select | boolean
| false
| No |
| withStatusBar | Deprecated | boolean
| true
| No |
| component | Component to render dropdown button | React.ComponentType | React.ReactNode
| | No |
| render | Render dropdown button via render function | (props) => React.ReactNode
| | No |
| children | Loading state of dropdown select | (props) => React.ReactElemnt | React.ReactNode
| | No |
| loadingComponent | Loading component to render loading icon | React.ComponentType | React.ReactNode
| | No |
| renderLoading | Render loading icon via render function | () => React.ReactNode
| | No |
| optionComponent | Option component to render option item | React.ComponentType | React.ReactNode
| | No |
| renderOption | Render option item via render function | (props) => React.ReactNode
| | No |
| optionGroupComponent | Option group component to render option group | React.ComponentType | React.ReactNode
| | No |
| renderOptionGroup | Render option group via render function | (props) => React.ReactNode
| | No |
| compareFunc | Compare function to compare two option, return true
if equal otherwise return false
| (option1, option2) => boolean
| | No |
| onShowDropdown | Callback function is called when dropdown will be shown | () => void
| | No |
| onHideDropdown | Callback function is called when dropdown will be hide | () => void
| | No |
| onSelectOption | Callback function is called when an option is selected | (option1) => void
| | No |
| buttonWrapperStyle | Additional styles for button's wrapper | object
| | No |
| buttonContainerStyle | Additional styles for button's container | object
| | No |
| buttonLabelStyle | Additional styles for button's label | object
| | No |
| buttonIconStyle | Additional styles for button's icon | object
| | No |
| dropdownStyle | Additional styles for dropdown's container | object
| | No |
| optionStyle | Additional styles for option's container | object
| | No |
| selectedOptionStyle | Additional styles for selected option's container | object
| | No |
| disabledOptionStyle | Additional styles for disabled option's container | object
| | No |
| optionLabelStyle | Additional styles for option's label | object
| | No |
| selectedOptionLabelStyle | Additional styles for selected option's label | object
| | No |
| disabledOptionLabelStyle | Additional styles for disabled option's label | object
| | No |
| optionGroupPadding | Padding left for nested option group | number
| | No |
Contributing
See the contributing guide to learn how to contribute to the repository and the development workflow.
License
MIT