A React Native search popup component easy to customize for both iOS and Android.
- searchable popup with customisable props
- Easy to use
- Consistent look and feel on iOS and Android
- Customizable font size, colors
npm install search-popup --save
or
yarn add search-popup
Props | Params | Required | Description |
---|---|---|---|
showPopup | boolean | Yes | condition which makes popup hide or show |
setShowPopup | function to update showPopup state | Yes | function to update showPopup state |
data | Array | Yes | Data is a plain array |
label | String | Yes | Extract the label from the data item |
Key | String | Yes | Extract the primary key from the data item |
selectedItem | Item | Yes | Selected value |
setItem | function | Yes | function to set item from list |
style | Style object | No | Styling object for popup |
headingText | String | No | Text shown at top of the popup as heading |
textInputProps | props object | No | props accepted by react native textInput can be given in this object |
itemBackgroundColor | Valid colour | No | background color of the list item |
selectedItemBackgroundColor | Valid colour | No | background color of the selected item from list |
Applies styling to heading View.
Applies styling to heading Text.
Applies styling to Popup View.
Applies styling to list component.
Applies styling to individual list Item View.
(NOTE: height given to this view will only have effect if it is provided in number)
Applies styling to individual list Item Text.
Applies styling to main Popup View.
Applies styling to search text input.
Applies styling to selected List item View.
import React, {useState} from 'react';
import {
Pressable,
SafeAreaView,
ScrollView,
StatusBar,
StyleSheet,
Text,
useColorScheme,
View,
Dimensions,
} from 'react-native';
import SearchPopup from './src/components/Search_Popup';
function App(): JSX.Element {
const [show, setShow] = useState(true);
const [item, setItem] = useState(countries[0].value);
const [itemKey, setItemKey] = useState(countries[0].key);
const data = [
{ value: 'Item 1', Key: '1' },
{ value: 'Item 2', Key: '2' },
{ value: 'Item 3', Key: '3' },
{ value: 'Item 4', Key: '4' },
{ value: 'Item 5', Key: '5' },
{ value: 'Item 6', Key: '6' },
{ value: 'Item 7', Key: '7' },
{ value: 'Item 8', Key: '8' },
];
return (
<SafeAreaView style={styles.container}>
<SearchPopup
showPopup={show}
setShowPopup={setShow}
setItem={setItem}
SelectedItem={item}
data={data}
label={'value'}
Key={'key'}
itemBackgroundColor={'#fff'}
selectedItemBackgroundColor={'#bbb'}
headingText={'Select Item'}
textInputProps={{
placeholder: 'Search',
placeholderTextColor: 'red',
}}
style={{
headingContainer: {
height: Dimensions.get('window').height * 0.05,
},
headingTextStyle: {
color: '#000',
fontSize: 18,
fontWeight: '700',
},
popup: {
height: '92%',
width: '88%',
borderRadius: 5,
backgroundColor: 'floralwhite',
alignItems: 'center',
justifyContent: 'center',
paddingTop: '4%',
paddingHorizontal: '2%',
},
list: {
width: '100%',
paddingTop: 10,
backgroundColor: 'pink',
paddingBottom: '20%',
},
listItemContainer: {
height: Dimensions.get('window').height * 0.07,
justifyContent: 'center',
paddingHorizontal: '8%',
borderRadius: 5,
},
listItemText: {
color: '#000',
fontSize: 15,
},
mainView: {
height: '100%',
width: '100%',
backgroundColor: 'rgba(0, 0, 0, .6)',
alignItems: 'center',
justifyContent: 'center',
},
searchInput: {
color: '#000',
marginHorizontal: '5%',
backgroundColor: 'cornsilk',
width: '100%',
borderRadius: 5,
borderColor: '#000',
borderWidth: 1,
},
selectedListItemText: {
color: '#fff',
fontSize: 18,
},
}}
/>
<Pressable
style={{
alignSelf: 'center',
height: 45,
minWidth: 200,
paddingHorizontal: 15,
backgroundColor: 'mistyrose',
alignItems: 'center',
justifyContent: 'center',
borderRadius: 10,
}}
onPress={() => setShow(true)}>
<Text style={{color: '#000'}}>{item}</Text>
</Pressable>
</SafeAreaView>
);
}
const styles = StyleSheet.create({
container: {
backgroundColor: 'azure',
flex: 1,
alignItems: 'center',
justifyContent: 'center',
},
});
export default App;