From af2a6273f31843556b171db063975b79a788fd17 Mon Sep 17 00:00:00 2001 From: Thales Augusto Date: Wed, 29 Jan 2020 15:44:42 -0300 Subject: [PATCH] fixed special character bug and implemented new search method --- index.d.ts | 1 + lib/react-native-multi-select.js | 47 ++++++++++++++++++++++---------- 2 files changed, 33 insertions(+), 15 deletions(-) diff --git a/index.d.ts b/index.d.ts index c3d9db8..8836f58 100644 --- a/index.d.ts +++ b/index.d.ts @@ -4,6 +4,7 @@ import * as React from "react"; import { ViewStyle, TextStyle, TextInputProps, StyleProp, FlatListProps } from 'react-native'; export interface MultiSelectProps { + loading?: boolean; single?: boolean; selectedItems?: any[]; items: any[]; diff --git a/lib/react-native-multi-select.js b/lib/react-native-multi-select.js index fce2b2d..e2dd37f 100644 --- a/lib/react-native-multi-select.js +++ b/lib/react-native-multi-select.js @@ -7,7 +7,9 @@ import { TouchableOpacity, FlatList, UIManager, - ViewPropTypes + ViewPropTypes, + ActivityIndicator, + ScrollView } from 'react-native'; import PropTypes from 'prop-types'; import reject from 'lodash/reject'; @@ -34,6 +36,7 @@ const defaultSearchIcon = ( export default class MultiSelect extends Component { static propTypes = { + loading: PropTypes.bool, single: PropTypes.bool, selectedItems: PropTypes.array, items: PropTypes.array.isRequired, @@ -85,6 +88,7 @@ export default class MultiSelect extends Component { }; static defaultProps = { + loading: false, single: false, selectedItems: [], uniqueKey: '_id', @@ -434,6 +438,8 @@ export default class MultiSelect extends Component { switch (this.props.filterMethod) { case 'full': return this._filterItemsFull(searchTerm); + case 'no_filter': + return this.props.items; default: return this._filterItemsPartial(searchTerm); } @@ -441,13 +447,11 @@ export default class MultiSelect extends Component { _filterItemsPartial = searchTerm => { const { items, displayKey } = this.props; - const filteredItems = []; - items.forEach(item => { - const parts = searchTerm.trim().split(/[ \-:]+/); - const regex = new RegExp(`(${parts.join('|')})`, 'ig'); - if (regex.test(get(item, displayKey))) { - filteredItems.push(item); - } + let filteredItems = []; + filteredItems = items.filter(item => { + let q = searchTerm.toLowerCase(); + let payload = get(item, displayKey); + return payload.toLowerCase().indexOf(q) > -1; }); return filteredItems; }; @@ -476,7 +480,8 @@ export default class MultiSelect extends Component { selectedItems, flatListProps, styleListContainer, - removeSelected + removeSelected, + loading } = this.props; const { searchTerm } = this.state; let component = null; @@ -529,12 +534,24 @@ export default class MultiSelect extends Component { if (canAddItems && !searchTermMatch && searchTerm.length) { addItemRow = this._getRowNew({ name: searchTerm }); } - component = ( - - {itemList} - {addItemRow} - - ); + + if (loading) { + component = ( + + + + + + ); + } else { + component = ( + + {itemList} + {addItemRow} + + ); + } + return component; };