|
1 | 1 | # react-navigation-addon-search-layout
|
2 | 2 |
|
3 |
| -A plain but perfectly acceptable search layout screen that looks good on |
4 |
| -iOS and Android. |
| 3 | +A plain but perfectly acceptable search layout screen that looks good on iOS and Android. |
5 | 4 |
|
6 | 5 | ## Installation
|
7 | 6 |
|
8 | 7 | ```
|
9 | 8 | npm install react-navigation-addon-search-layout
|
10 | 9 | ```
|
11 | 10 |
|
12 |
| -This requires that you have `react-native-vector-icons` installed in |
13 |
| -your project, it uses the `Ionicons` font family. If you use the Expo |
14 |
| -managed workflow, it will work out of the box as that comes preinstalled |
15 |
| -and is available through `@expo/vector-icons`'. |
| 11 | +This requires that you have `react-native-vector-icons` installed in your project, it uses the `Ionicons` font family. If you use the Expo managed workflow, it will work out of the box as that comes preinstalled and is available through `@expo/vector-icons`'. |
16 | 12 |
|
17 | 13 | ## Usage
|
18 | 14 |
|
19 |
| -Here's an example of how you can use this: |
20 |
| - |
21 |
| -```js |
22 |
| -import * as React from 'react'; |
23 |
| -import { |
24 |
| - Animated, |
25 |
| - Button, |
26 |
| - Platform, |
27 |
| - Text, |
28 |
| - StyleSheet, |
29 |
| - View, |
30 |
| -} from 'react-native'; |
31 |
| -import { createAppContainer } from 'react-navigation'; |
32 |
| -import { |
33 |
| - createStackNavigator, |
34 |
| - StackViewTransitionConfigs, |
35 |
| -} from 'react-navigation-stack'; |
36 |
| -import { RectButton, BorderlessButton } from 'react-native-gesture-handler'; |
37 |
| -import SearchLayout from 'react-navigation-addon-search-layout'; |
38 |
| -import { Ionicons } from '@expo/vector-icons'; |
39 |
| - |
40 |
| -class HomeScreen extends React.Component { |
41 |
| - static navigationOptions = ({ navigation }) => ({ |
42 |
| - title: 'Home', |
43 |
| - headerRight: ( |
44 |
| - <BorderlessButton |
45 |
| - onPress={() => navigation.navigate('Search')} |
46 |
| - style={{ marginRight: 15 }}> |
47 |
| - <Ionicons |
48 |
| - name="md-search" |
49 |
| - size={Platform.OS === 'ios' ? 22 : 25} |
50 |
| - color={SearchLayout.DefaultTintColor} |
51 |
| - /> |
52 |
| - </BorderlessButton> |
53 |
| - ), |
54 |
| - }); |
55 |
| - |
56 |
| - render() { |
57 |
| - return ( |
58 |
| - <View style={styles.container}> |
59 |
| - <Text>Hello there!!!</Text> |
60 |
| - </View> |
61 |
| - ); |
62 |
| - } |
63 |
| -} |
64 |
| - |
65 |
| -class ResultScreen extends React.Component { |
66 |
| - static navigationOptions = { |
67 |
| - title: 'Result', |
68 |
| - }; |
69 |
| - |
70 |
| - render() { |
71 |
| - return ( |
72 |
| - <View style={styles.container}> |
73 |
| - <Text>{this.props.navigation.getParam('text')} result!</Text> |
74 |
| - </View> |
75 |
| - ); |
76 |
| - } |
77 |
| -} |
78 |
| - |
79 |
| -class SearchScreen extends React.Component { |
80 |
| - static navigationOptions = { |
81 |
| - header: null, |
82 |
| - }; |
83 |
| - |
84 |
| - state = { |
85 |
| - searchText: null, |
86 |
| - }; |
87 |
| - |
88 |
| - _handleQueryChange = searchText => { |
89 |
| - this.setState({ searchText }); |
90 |
| - }; |
91 |
| - |
92 |
| - _executeSearch = () => { |
93 |
| - alert('do search!'); |
94 |
| - }; |
95 |
| - |
96 |
| - render() { |
97 |
| - let { searchText } = this.state; |
98 |
| - |
99 |
| - return ( |
100 |
| - <SearchLayout |
101 |
| - onChangeQuery={this._handleQueryChange} |
102 |
| - onSubmit={this._executeSearch}> |
103 |
| - {searchText ? ( |
104 |
| - <RectButton |
105 |
| - style={{ |
106 |
| - borderBottomWidth: StyleSheet.hairlineWidth, |
107 |
| - borderBottomColor: '#eee', |
108 |
| - paddingVertical: 20, |
109 |
| - paddingHorizontal: 15, |
110 |
| - }} |
111 |
| - onPress={() => |
112 |
| - this.props.navigation.navigate('Result', { |
113 |
| - text: this.state.searchText, |
114 |
| - }) |
115 |
| - }> |
116 |
| - <Text style={{ fontSize: 14 }}>{searchText}!</Text> |
117 |
| - </RectButton> |
118 |
| - ) : null} |
119 |
| - </SearchLayout> |
120 |
| - ); |
121 |
| - } |
122 |
| -} |
123 |
| - |
124 |
| -let SearchStack = createStackNavigator( |
125 |
| - { |
126 |
| - Home: HomeScreen, |
127 |
| - Search: SearchScreen, |
128 |
| - }, |
129 |
| - { |
130 |
| - transitionConfig: () => StackViewTransitionConfigs.NoAnimation, |
131 |
| - navigationOptions: { |
132 |
| - header: null, |
133 |
| - }, |
134 |
| - defaultNavigationOptions: { |
135 |
| - gesturesEnabled: false, |
136 |
| - }, |
137 |
| - } |
138 |
| -); |
139 |
| - |
140 |
| -let MainStack = createStackNavigator({ |
141 |
| - Feed: SearchStack, |
142 |
| - Result: ResultScreen, |
143 |
| -}); |
144 |
| - |
145 |
| -export default createAppContainer(MainStack); |
146 |
| - |
147 |
| -const styles = StyleSheet.create({ |
148 |
| - container: { |
149 |
| - flex: 1, |
150 |
| - alignItems: 'center', |
151 |
| - justifyContent: 'center', |
152 |
| - }, |
153 |
| -}); |
154 |
| -``` |
| 15 | +See [example/App.tsx](https://github.com/react-navigation/search-layout/blob/master/example/App.tsx). |
0 commit comments