forked from iamshadmirza/react-native-design-system
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSearchBar.js
63 lines (57 loc) · 1.6 KB
/
SearchBar.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import React from 'react';
import { View, TouchableOpacity, StyleSheet, ActivityIndicator } from 'react-native';
import Feather from 'react-native-vector-icons/Feather';
import Input from '../Input/Input';
import PropTypes from 'prop-types';
import { useThemeContext } from '../util/ThemeProvider';
const renderIndicator = (props) => {
return (
<View style={styles.rightIcons}>
<View style={styles.indicator}>
<ActivityIndicator animating={props.loading === true} color={props.indicatorColor} />
</View>
{props.onCancel && props.value.length !== 0 &&
<TouchableOpacity onPress={props.onCancel}>
{props.rightIcon ||
<Feather
name="x-circle"
size={20}
color={props.theme.brandColor[props.iconColor]} />
}
</TouchableOpacity>
}
</View>
);
};
const SearchBar = React.forwardRef((props, ref) => {
const theme = useThemeContext();
return (
<Input
leftIcon={props.leftIcon || <Feather name="search" size={20} color={theme.brandColor[props.iconColor]} />}
{...props}
ref={ref}
rightIcon={renderIndicator({ ...props, theme })}
/>
);
});
SearchBar.propTypes = {
indicatorColor: PropTypes.string,
loading: PropTypes.bool,
iconColor: PropTypes.string,
onCancel: PropTypes.func,
rightIcon: PropTypes.element,
};
SearchBar.defaultProps = {
iconColor: 'outline',
value: '',
placeholder: 'Search here',
};
const styles = StyleSheet.create({
rightIcons: {
flexDirection: 'row',
},
indicator: {
paddingHorizontal: 10,
},
});
export default SearchBar;