diff --git a/index.js b/index.js index 5c94a58..fbddfc4 100644 --- a/index.js +++ b/index.js @@ -1,6 +1,6 @@ //import liraries import React, { Component } from 'react'; -import { Text, StyleSheet, TouchableOpacity, View, FlatList, TextInput, Dimensions, Animated, Platform } from 'react-native'; +import { Text, StyleSheet, TouchableOpacity, View, FlatList, TextInput, Dimensions, Animated, Platform, Keyboard } from 'react-native'; import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; import Modal from 'react-native-modal'; import Button from './lib/Button'; @@ -27,7 +27,8 @@ class Select2 extends Component { preSelectedItem: [], selectedItem: [], data: [], - keyword: '' + keyword: '', + inputRef: React.createRef(), } animatedHeight = new Animated.Value(INIT_HEIGHT); @@ -66,6 +67,22 @@ class Select2 extends Component { return defaultFontName ? { fontFamily: defaultFontName } : {}; } + + handleConfirm(recivedSelectedItem) { + let { onSelect } = this.props; + let { selectedItem } = this.state; + let selectedIds = [], selectedObjectItems = []; + let itens = recivedSelectedItem + ? recivedSelectedItem + : selectedItem + itens.map(item => { + selectedIds.push(item.id); + selectedObjectItems.push(item); + }) + onSelect && onSelect(selectedIds, selectedObjectItems); + this.setState({ show: false, keyword: '', preSelectedItem: selectedItem }); + } + cancelSelection() { let { data, preSelectedItem } = this.state; data.map(item => { @@ -94,6 +111,10 @@ class Select2 extends Component { data.map(item => { if (item.checked) selectedItem.push(item); }) + if(isSelectSingle && item.checked) { + Keyboard.dismiss() + this.handleConfirm(selectedItem) + } this.setState({ data, selectedItem }); } keyExtractor = (item, idx) => idx.toString(); @@ -122,22 +143,27 @@ class Select2 extends Component { ); } - closeModal = () => this.setState({ show: false }); + closeModal = () => this.setState({ show: false, keyword: '' }); showModal = () => this.setState({ show: true }); render() { let { - style, modalStyle, title, onSelect, onRemoveItem, popupTitle, colorTheme, + style, modalStyle, title, onRemoveItem, popupTitle, colorTheme, isSelectSingle, cancelButtonText, selectButtonText, searchPlaceHolderText, selectedTitleStyle, buttonTextStyle, buttonStyle, showSearchBox } = this.props; - let { show, selectedItem, preSelectedItem } = this.state; + let { show, preSelectedItem, inputRef } = this.state; return ( { + setTimeout(() => { + this.state.inputRef.current.focus() + }, 100); + }} onBackdropPress={this.closeModal} style={{ justifyContent: 'flex-end', @@ -158,6 +184,7 @@ class Select2 extends Component { { showSearchBox ? + {!isSelectSingle &&