UNPKG

react-native-checkbox-selection

Version:

A customizables ListView that allows you to select multiple and single rows

125 lines (118 loc) 3.44 kB
import React, { useState } from "react"; import PropTypes from "prop-types"; import { TouchableOpacity, Text, StyleSheet, View } from "react-native"; import SelectMultiple from "react-native-select-multiple"; import Icon from "react-native-vector-icons/FontAwesome"; const getSelectedItemsNames = (selectedItems = [], data) => { return selectedItems .reduce((arr, item) => { let filter = data.find((it) => it.value === item.value); arr.push(filter && filter.label); return arr; }, []) .join(", "); }; const MultiSelect = (props) => { console.log("props====>", props); let [showSelect, updateSelect] = useState(props.enableTitle ? false : true); let selectedItems = getSelectedItemsNames( props.selectedItems || [], props.data ); return ( <View style={props.containerStyle}> {props.enableTitle || selectedItems.length ? ( <TouchableOpacity style={styles.styleInputGroup} onPress={() => updateSelect(!showSelect)} > <Text numberOfLines={1} style={[styles.styleTextDropdown, props.styleTextDropdown]} > {selectedItems || props.title} </Text> {!props.iconDisabled && ( <Icon name={props.icon || "caret-down"} size={20} /> )} </TouchableOpacity> ) : null} <SelectMultiple items={props.data} ref={props.ref} keyExtractor={(item) => item.value} onSelectionsChange={(items) => { if (props.single) { !props.disableAutoClose && updateSelect(false); props.onSelectedItemsChange( items.length ? [items[items.length - 1]] : [] ); return; } props.onSelectedItemsChange(items); }} selectedItems={props.selectedItems} rowStyle={styles.searchInputStyle} labelStyle={styles.styleTextDropdown} style={{ display: showSelect ? "flex" : "none" }} checkboxSource={props.checkboxSource} selectedCheckboxSource={props.selectedCheckboxSource} /> </View> ); }; const styles = StyleSheet.create({ styleInputGroup: { backgroundColor: "transparent", justifyContent: "space-between", flexDirection: "row", paddingVertical: 10, borderBottomColor: "black", borderBottomWidth: 1, alignItems: "center" }, searchInputStyle: { flexDirection: "row-reverse", justifyContent: "space-between", backgroundColor: "transparent" }, styleItemsContainer: { backgroundColor: "black" }, styleTextDropdown: { color: "black", fontSize: 18, marginBottom: 10 }, styleDropdownMenuSubsection: { backgroundColor: "transparent", borderBottomColor: "black" } }); MultiSelect.propTypes = { data: PropTypes.array.isRequired, ref: PropTypes.func, onSelectedItemsChange: PropTypes.func.isRequired, selectedItems: PropTypes.array.isRequired, single: PropTypes.bool, disableAutoClose: PropTypes.bool, iconDisabled: PropTypes.bool, title: PropTypes.string, enableTitle: PropTypes.string, icon: PropTypes.string }; MultiSelect.defaultProps = { data: [], ref: () => {}, onSelectedItemsChange: () => {}, selectedItems: [], single: false, disableAutoClose: false, iconDisabled: false, title: "", enableTitle: false, icon: "" }; export default MultiSelect;