diff --git a/index.js b/index.js index 5c94a58..4176b00 100644 --- a/index.js +++ b/index.js @@ -30,6 +30,13 @@ class Select2 extends Component { keyword: '' } animatedHeight = new Animated.Value(INIT_HEIGHT); + clearSelected() { + let dt = this.state.data; + dt.map(item => { + item.checked = false; + }); + this.setState({ data: dt, preSelectedItem: [] }); + } componentDidMount() { this.init(); @@ -105,15 +112,21 @@ class Select2 extends Component { onPress={() => this.onItemSelected(item, isSelectSingle)} activeOpacity={0.7} style={styles.itemWrapper}> - - {item.name} - + { + this.props.renderItem != null ? + this.props.renderItem({ item, idx }) + : + + {item.name} + + } ); } + renderEmpty = () => { let { listEmptyTitle } = this.props; return ( @@ -129,7 +142,8 @@ class Select2 extends Component { let { style, modalStyle, title, onSelect, onRemoveItem, popupTitle, colorTheme, isSelectSingle, cancelButtonText, selectButtonText, searchPlaceHolderText, - selectedTitleStyle, buttonTextStyle, buttonStyle, showSearchBox + selectedTitleStyle, buttonTextStyle, buttonStyle, showSearchBox, withSelectAll, selectAllText + , selectAllStyle } = this.props; let { show, selectedItem, preSelectedItem } = this.state; return ( @@ -148,7 +162,7 @@ class Select2 extends Component { animationOutTiming={300} hideModalContentWhileAnimating isVisible={show}> - + {popupTitle || title} @@ -179,6 +193,31 @@ class Select2 extends Component { /> : null } + { + !isSelectSingle && withSelectAll && + + {selectAllText ?? 'Select All'} + { + let data = this.state.data; + data.map(d => { + d.checked = typeof (d.checked) == 'undefined' || d.checked == null ? false : d.checked; + }); + let isCurrentCheckedAll = data.filter(d => d.checked == true).length == this.state.data.length; + data.map(d => { + d.checked = !isCurrentCheckedAll; + return d; + }); + let selectedItem = []; + data.map(item => { + if (item.checked) selectedItem.push(item); + }) + this.setState({ data, selectedItem }); + }} + name={this.state.data.filter(d => d.checked == true).length == this.state.data.length ? 'check-circle-outline' : 'radiobox-blank'} + color={this.state.data.filter(d => d.checked == true).length == this.state.data.length ? colorTheme : '#777777'} size={20} /> + + } ); } + } // define your styles