sharingan-rn-modal-dropdown (An extension component for the react-native-paper)
A simple and customizable react-native dropdown created using react-native-modal and react-native-paper.
- Checkout the example/ folder for source code and example.
- Single, Group, and Multiselect Dropdowns
- Follows Material Design spec
- Highly customizable
- Easy to integrate with formik and redux-form
- Implemented using react-native-modal
- Fully typed with TypeScript
Open a Terminal in the project root and run:
yarn add sharingan-rn-modal-dropdown
npm install sharingan-rn-modal-dropdown
import React, { useState } from 'react';
import { ScrollView, StyleSheet, View } from 'react-native';
import {
Dropdown,
GroupDropdown,
MultiselectDropdown,
} from 'sharingan-rn-modal-dropdown';
export const data = [
{
value: '1',
label: 'Tiger Nixon',
employee_salary: '320800',
employee_age: '61',
avatarSource: require('./ddicon.png'),
},
{
value: '2',
label: 'Garrett Winters',
employee_salary: '170750',
employee_age: '63',
avatarSource: {
uri: 'https://img.icons8.com/color/344/circled-user-male-skin-type-5.png',
},
},
{
value: '3',
label: 'Ashton Cox',
employee_salary: '86000',
employee_age: '66',
avatarSource: {
uri: 'https://img.icons8.com/color/344/circled-user-male-skin-type-5.png',
},
},
{
value: '4',
label: 'Cedric Kelly',
employee_salary: '433060',
employee_age: '22',
avatarSource: {
uri: 'https://img.icons8.com/color/344/circled-user-male-skin-type-5.png',
},
},
];
export const groupData = [
{
title: 'Apple',
data: [
{
value: '233',
label: 'iPhone SE(2020)',
avatarSource: {
uri: 'https://img.icons8.com/cute-clipart/2x/iphone-x.png',
},
},
{
value: '242',
label: 'iPhone 11',
avatarSource: {
uri: 'https://img.icons8.com/cute-clipart/2x/iphone-x.png',
},
},
{
value: '24w',
label: 'iPhone 12',
avatarSource: {
uri: 'https://img.icons8.com/cute-clipart/2x/iphone-x.png',
},
},
{
value: '99',
label: 'iPhone 12 Mini',
avatarSource: {
uri: 'https://img.icons8.com/cute-clipart/2x/iphone-x.png',
},
},
],
},
{
title: 'Google',
data: [
{
value: '19',
label: 'Pixel 3a',
avatarSource: {
uri: 'https://img.icons8.com/cute-clipart/344/android.png',
},
},
{
value: '20',
label: 'Pixel 3',
avatarSource: {
uri: 'https://img.icons8.com/cute-clipart/344/android.png',
},
},
{
value: '21',
label: 'Pixel 3 xl',
avatarSource: {
uri: 'https://img.icons8.com/cute-clipart/344/android.png',
},
},
{
value: '16',
label: 'Pixel 4',
avatarSource: {
uri: 'https://img.icons8.com/cute-clipart/344/android.png',
},
},
{
value: '17',
label: 'Pixel 4a',
avatarSource: {
uri: 'https://img.icons8.com/cute-clipart/344/android.png',
},
},
{
value: '18',
label: 'Pixel 5',
avatarSource: {
uri: 'https://img.icons8.com/cute-clipart/344/android.png',
},
},
],
},
];
const Example = () => {
const [valueMS, setValueMS] = useState<string[]>([]);
const [valueSS, setValueSS] = useState('');
const [valueGS, setValueGS] = useState('');
const onChangeMS = (value: string[]) => {
setValueMS(value);
};
const onChangeSS = (value: string) => {
setValueSS(value);
};
const onChangeGS = (value: string) => {
setValueGS(value);
};
return (
<View
style={{
flexDirection: 'column',
height: '100%',
}}
>
<ScrollView>
<View style={styles.container}>
<MultiselectDropdown
label="Multi select with avatar chip outlined"
data={data}
enableSearch
enableAvatar
chipType="outlined"
value={valueMS}
onChange={onChangeMS}
/>
</View>
<View style={styles.container}>
<Dropdown
label="Simple dropdown"
data={data}
enableSearch
value={valueSS}
onChange={onChangeSS}
/>
</View>
<View style={styles.container}>
<GroupDropdown
label="Group dropdown with avatar"
data={groupData}
enableSearch
enableAvatar
value={valueGS}
onChange={onChangeGS}
/>
</View>
</ScrollView>
</View>
);
};
const styles = StyleSheet.create({
container: {
paddingTop: 30,
marginLeft: 20,
marginRight: 20,
flex: 1,
},
buttonView: {
display: 'flex',
justifyContent: 'center',
flexDirection: 'row',
marginTop: 10,
},
});
export default Example;
The package exports a Dropdown
, GroupDropdown
, and MultiselectDropdown,
components which is the one you'd use to render the dropdowns.
Set the dropdown field label.
Set whether the dropdown is required or not and an asterisk symbol will be added with the label for indication. Also, it can be used with the error.
Enable and Disable the dropdown
Open the dropdown like the modal.
Enable search field for the dropdown.
Set whether the dropdown has an error or not. The error field will work only when the required field is enabled.
Call back function onClosing the dropdown modal.
Control the elevation for the dropdown container view.
Control the border radius for the dropdown container view.
Changes the loader indicator color.
Search area filed placeholder text.
Change the ripple color.
Set the helper text for the dropdown, this will be visible only when the dropdown field turned into an error field.
Set the dropdown error color.
Show or hide loader for the dropdown container.
Change the text view style for the dropdown item.
Change the dropdown item container view style.
Modal open animation type same as react-native-modal.
Modal open animation duration same as react-native-modal.
Modal close animation duration same as react-native-modal.
Modal supported orientations same as react-native-modal.
Dropdown parent container style.
- String: Message to be shown when the dropdown is empty. or
- React Node: to completely change the empty component.
Enable or disable avatar for the dropdown items.
Set the avatar view size.
Set a custom avatar for your dropdown items
{
value: '2',
label: 'Garrett Winters',
avatarComponent: <Avatar.Icon size={24} icon="folder" />
}
Since the dropdown build on top of Native Paper you can over write the theme by passing your own native paper theme, for more info refer https://callstack.github.io/react-native-paper/theming.html
Dropdown input style.
Dropdown main container style.
Change TextInput Under Line color.
Disable the selected item tick mark.
Change TextInput Placeholder text.
Change TextInput Placeholder color.
Change the selected text view style for the dropdown item.
Change the selected item view style for the dropdown item.
Remove TextInput label.
Note
: Empty string must be passed since label is a required field
Mode of the TextInput.
flat
(default) - flat input with an underline.outlined
- input with an outline. In outlined mode, the background color of the label is derived from colors.background in theme or the backgroundColor style. This component render TextInputOutlined or TextInputFlat based on that props
Remove TextInput label. Note: Empty string must be passed since label is a required field
Set the dropdown value (only string or number based on the data node value)
, can be used in redux-form or formik.
Collection of object items to render the group dropdown.
const data = [
{
value: '1',
label: 'Tiger Nixon',
avatarSource: require('./ddicon.png'),
},
{
value: '2',
label: 'Garrett Winters',
avatarSource: {
uri:
'https://img.icons8.com/color/344/circled-user-female-skin-type-6.png',
},
},
];
Call back function onSelecting the dropdown value. It will return the selected item value.
Enable or disable sorting for the dropdown items.
Set the sorting order for the dropdown items
asc
(default)desc
Set the group dropdown value (only string or number based on the data node value)
, can be used in redux-form or formik.
Collection of object items to render the group dropdown.
const data = [
{
title: 'Apple',
data: [
{
value: 'iphonese',
label: 'iPhone SE(2020)',
avatarSource: require('./ddicon.png'),
},
{
value: '23',
label: 'iPhone X',
avatarSource: {
uri: 'https://img.icons8.com/emoji/344/mobile-phone.png',
},
},
],
}
}
Call back function onSelecting the dropdown value. It will return the selected item value.
Keep the group header sticky or not.
Dropdown group header container view style.
Dropdown group header text style.
Set the multiselect dropdown value(only array of string[] or number[] based on the data node value
) . Aslo, can be used in redux-form or formik
Collection of object items to render the group dropdown.
const data = [
{
value: '1',
label: 'Tiger Nixon',
avatarSource: require('./ddicon.png'),
},
{
value: '2',
label: 'Garrett Winters',
avatarSource: {
uri:
'https://img.icons8.com/color/344/circled-user-female-skin-type-6.png',
},
},
];
Call back function onSelecting the dropdown value. It will return the selected item value.
Enable or disable sorting for the dropdown items.
Set the sorting order for the dropdown items
asc
(default)desc
Mode of the chip.
flat
- flat chip without outline.outlined
- chip with an outline.
Change chip label text style.
Change the chip view style.
Change the selection section empty text value.
See the contributing guide to learn how to contribute to the repository and the development workflow.