UNPKG

react-native-search-filter

Version:
72 lines (67 loc) 1.78 kB
/** * Sample React Native App * https://github.com/facebook/react-native * * @format * @flow */ import React, { Component } from 'react'; import { ScrollView, StyleSheet, Text, View, TouchableOpacity } from 'react-native'; import SearchInput, { createFilter } from 'react-native-search-filter'; import emails from './emails'; const KEYS_TO_FILTERS = ['user.name', 'subject']; export default class App extends Component { constructor(props) { super(props); this.state = { searchTerm: '' } } searchUpdated(term) { this.setState({ searchTerm: term }) } render() { const filteredEmails = emails.filter(createFilter(this.state.searchTerm, KEYS_TO_FILTERS)) return ( <View style={styles.container}> <SearchInput onChangeText={(term) => { this.searchUpdated(term) }} style={styles.searchInput} placeholder="Type a message to search" /> <ScrollView> {filteredEmails.map(email => { return ( <TouchableOpacity onPress={() => alert(email.user.name)} key={email.id} style={styles.emailItem}> <View> <Text>{email.user.name}</Text> <Text style={styles.emailSubject}>{email.subject}</Text> </View> </TouchableOpacity> ) })} </ScrollView> </View> ); } } const styles = StyleSheet.create({ container: { flex: 1, backgroundColor: '#fff', justifyContent: 'flex-start' }, emailItem: { borderBottomWidth: 0.5, borderColor: 'rgba(0,0,0,0.3)', padding: 10 }, emailSubject: { color: 'rgba(0,0,0,0.5)' }, searchInput: { padding: 10, borderColor: '#CCC', borderWidth: 1 } });