UNPKG

react-native-dropdown-multi

Version:

A customizable multi-select dropdown component for React Native.

171 lines (137 loc) 13.9 kB
# react-native-dropdown-multi react-native-dropdown-multi is supported on both Android and iOS, making it a versatile solution for cross-platform dropdown functionality in React Native applications. Here's a breakdown of its key features ### Key Features - Multi-Select & Single Select - Searchable - Customizable Styling - Modal Interface - Clear Selection Option - Cross-Platform ## Screenshots <div style="display: flex; flex-direction: column; align-items: center;"> <img src="https://github.com/sonideep239/react-native-dropdown-multi/blob/main/src/assets/1.png" width="230" alt="App Screenshot" /> <img src="https://github.com/sonideep239/react-native-dropdown-multi/blob/main/src/assets/2.png" width="230" alt="App Screenshot" /> <img src="https://github.com/sonideep239/react-native-dropdown-multi/blob/main/src/assets/3.png" width="230" alt="App Screenshot" /> <img src="https://github.com/sonideep239/react-native-dropdown-multi/blob/main/src/assets/4.png" width="230" alt="App Screenshot" /> </div> ## Installation Use the package manager [npm](https://www.npmjs.com) to install react-native-dropdown-multi. ```bash npm i react-native-dropdown-multi ``` OR ```bash yarn add react-native-dropdown-multi ``` ## Installation Steps The library has specified dedicated steps for each platform. Please follow their installation guide in order to properly use icon fonts. ```bash npm i react-native-vector-icons ``` ### IOS Installation Please refer linked document [react-native-vector-icons](https://www.npmjs.com/package/react-native-vector-icons#ios-setup) ### Android Installation Please refer linked document [react-native-vector-icons](https://www.npmjs.com/package/react-native-vector-icons#android-setup) ## Usage ```react-native import React, { useState } from 'react'; import CustomDropdown from 'react-native-dropdown-multi'; const [selectedEmployee, setSelectedEmployee] = useState({ label: '', value: '' }); const [selectedEmployees, setSelectedEmployees] = useState([]); const [isReportForVisible, setIsReportForVisible] = useState(false); const [isAssignVisible, setIsAssignVisible] = useState(false); const employees = Array.from({ length: 100 }, (_, i) => ({ label: `Employee ${i + 1}`, value: i + 1, })); const toggleReportForDropdown = () => setIsReportForVisible(!isReportForVisible); const toggleAssignDropdown = () => setIsAssignVisible(!isAssignVisible); const updateAssignedEmployees = (value) => { setSelectedEmployees(value.map((val) => val)); }; <View style={{ padding: 15, gap: 10 }}> <Text>Example 1 </Text> <CustomDropdown isClearable={true} selectedValue={selectedEmployee} isSearchEnabled={true} data={employees} isVisible={isReportForVisible} onClose={toggleReportForDropdown} onSelect={setSelectedEmployee} onPress={toggleReportForDropdown} customStyles={{ pickerWrapper: { borderColor: 'blue' }, itemText: { color: 'darkblue' }, buttonText: { color: 'white', fontWeight: 'bold' }, }} customButtonLabels={{ submit: 'Confirm', close: 'Cancel' }} dropdownHeight={500} searchPlaceholder="Type to search..." loading={false} /> <Text>Example 2 (Multiselect)</Text> <CustomDropdown isClearable={true} selectedValue={selectedEmployees} isSearchEnabled={true} isMultiSelect={true} data={employees} isVisible={isAssignVisible} onClose={toggleAssignDropdown} onSelect={updateAssignedEmployees} onPress={toggleAssignDropdown} /> </View> ``` ## Props & Styling #### Props Certainly! Below is a table summarizing all the props, their types, whether they are required, and default values (if applicable). Additionally, I'll include the corresponding styling properties for each prop: | **Prop** | **Type** | **Description** | **Required** | **Default Value** | |-------------------------|-----------------------|------------------------------------------------------------------------------------------------------------------------|--------------|------------------------------------------------| | `data` | `Array<Object>` | The data array to populate the dropdown. Each object must have a `value` and `label` property. | Yes | **Required.** No default value. | | `isVisible` | `boolean` | Controls whether the dropdown modal is visible or not. | Yes | **Required.** No default value. | | `onClose` | `Function` | A function to handle closing the dropdown. | Yes | **Required.** No default value. | | `onSelect` | `Function` | A function to handle item selection. Receives the selected item or items. | Yes | **Required.** No default value. | | `isSearchEnabled` | `boolean` | If `true`, the search bar will be enabled in the dropdown. | No | `false` | | `selectedValue` | `Object` | The initially selected item. The object should have a `value` and `label`. | No | `{}` (empty object) | | `onPress` | `Function` | A function to be called when the dropdown is pressed (to open the modal). | Yes | **Required.** No default value. | | `isClearable` | `boolean` | If `true`, a clear icon will be displayed to clear the selection. | No | `false` | | `placeholder` | `string` | Placeholder text for the dropdown input when no item is selected. | No | `"Select an item"` | | `isMultiSelect` | `boolean` | If `true`, the dropdown will allow multiple selections. | No | `false` | | `customStyles` | `Object` | A set of custom styles to override default styles. Custom styles can include `pickerWrapper`, `item`, `modalContainer`, and more. | No | `{}` (empty object) | | `customButtonLabels` | `Object` | Custom labels for the buttons. Supports `submit` and `close`. | No | `{ submit: "Submit", close: "Close" }` | | `customIcons` | `Object` | Custom icons for the dropdown button and clear icon. Supports `dropdown` and `clear`. | No | `{ dropdown: <FontAwesomeIcon>, clear: <FontAwesomeIcon> }` | | `dropdownHeight` | `number` | Defines the height of the dropdown modal. | No | `height * 0.7` | | `searchPlaceholder` | `string` | Placeholder text for the search input. | No | `"Search..."` | | `loading` | `boolean` | If `true`, a loading indicator will be shown instead of the dropdown items. | No | `false` | #### Custom Styles (for the customStyles prop) Here are the available custom styles that can be passed within the customStyles prop: | **Prop** | **Type** | **Description** | **Required** | **Default Value** | |-------------------------|-----------------------|------------------------------------------------------------------------------------------------------------------------|--------------|------------------------------------------------| | `pickerWrapper` | `Object` | Custom styles for the wrapper of the dropdown input. This affects the overall outer container of the dropdown. | No | `{}` (empty object) | | `contentWrapper` | `Object` | Custom styles for the wrapper inside the dropdown input, usually for the layout (row, alignment, etc.). | No | `{}` (empty object) | | `item` | `Object` | Custom styles for individual dropdown items (each option). Can adjust padding, borders, etc. | No | `{}` (empty object) | | `itemText` | `Object` | Custom styles for the text inside each dropdown item. | No | `{}` (empty object) | | `selectedColor` | `string` | The color applied to the item circle when it's selected. | No | `'green'` | | `selectedTextColor` | `string` | Custom text color for selected items (multi-select). | No | `'black'` | | `modalContainer` | `Object` | Custom styles for the outer container of the dropdown modal. | No | `{}` (empty object) | | `modalView` | `Object` | Custom styles for the modal view, where the dropdown list and buttons reside. | No | `{}` (empty object) | | `searchContainer` | `Object` | Custom styles for the search bar container inside the dropdown modal. | No | `{}` (empty object) | | `searchInput` | `Object` | Custom styles for the text input inside the search bar of the dropdown modal. | No | `{}` (empty object) | | `clearButton` | `Object` | Custom styles for the clear button (appears when the search input is not empty). | No | `{}` (empty object) | | `buttonContainer` | `Object` | Custom styles for the container holding the submit and close buttons. | No | `{}` (empty object) | | `button` | `Object` | Custom styles for the individual buttons (submit or close). | No | `{}` (empty object) | | `buttonText` | `Object` | Custom styles for the text inside the submit and close buttons. | No | `{}` (empty object) | | `multiselectText` | `Object` | Custom styles for the text inside the multi-select dropdown (when multiple items are selected). | No | `{}` (empty object) | | `placeholderText` | `Object` | Custom styles for the placeholder text when no item is selected in the dropdown. | No | `{}` (empty object) | | `clearIcon` | `Object` | Custom styles for the clear icon (for clearing the selection). | No | `{}` (empty object) | | `dropdownIcon` | `Object` | Custom styles for the dropdown icon (the arrow indicator). | No | `{}` (empty object) | | `loadingContainer` | `Object` | Custom styles for the loading spinner container when the dropdown is in a loading state. | No | `{}` (empty object) | | `emptyListText` | `Object` | Custom styles for the "No data found" text when the filtered list is empty. | No | `{}` (empty object) | ## Contributing Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change. Please make sure to update tests as appropriate. ## License [MIT](https://choosealicense.com/licenses/mit/)