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;
};