Up to date working Google Places Input. Calling directly API not JS SDK.
New configuration props:
- contentScrollViewBottom - Custom content at the bottom of scroll view list with results
- contentScrollViewTop - Custom content at the bottom of scroll view list with results
New configuration props:
- onChangeText - Method triggered when TextInput is changed. Returning query and this.
New configuration props:
- querySession - A random string which identifies an autocomplete session for billing purposes. If this parameter is omitted from an autocomplete request, the request is billed independently. See the pricing sheet for details.
yarn add react-native-places-input
or
npm install react-native-places-input
Fairly easy. Few required props but most of the work is already done in a component.
import PlacesInput from 'react-native-places-input';
And inside a component
<PlacesInput
googleApiKey={GOOGLE_API_KEY}
onSelect={place => console.log(place}
/>
class InputWrapper extends React.Component {
render() {
return (
<View style={{ width: '100%' }}>
<PlacesInput
googleApiKey={GOOGLE_API_KEY}
placeHolder={"Some Place holder"}
language={"en-US"}
onSelect={place => {
this.props.goToPoint(get(place, 'result.geometry.location.lat'), get(place, 'result.geometry.location.lng'))
}}
iconResult={<Ionicons name="md-pin" size={25} style={styles.placeIcon}/>}
/>
</View>
);
}
}
List of props supported by a component
Prop | Type | Default | Description |
---|---|---|---|
googleApiKey | PropTypes.string.isRequired | Google API key | |
iconInput | any | Icon added to an input | |
iconResult | any | Icon added to results | |
language | string | en | Language for google API call |
placeHolder | string | Search places... | placeholder for an input |
querySession | string | A random string which identifies an autocomplete session for billing purposes. If this parameter is omitted from an autocomplete request, the request is billed independently. See the pricing sheet for details. | |
queryTypes | string | You may restrict results from a Place Autocomplete request to be of a certain type by passing a types parameter. Google docs | |
queryFields | string | formatted_address,geometry,name | Fields requested from Google API |
queryCountries | array | Array of country codes to limit results | |
resultRender | func | place => place.description | Function to render results text |
searchLatitude | number | Lat to limit results | |
searchLongitude | number | Lng to limit results | |
searchRadius | number | radius to limit results | |
stylesContainer | object | {} | Custom styles for a container |
stylesInput | object | {} | Custom styles for an input |
stylesItem | object | {} | Custom styles for an item |
stylesItemText | object | {} | Custom styles for an item text |
stylesList | object | {} | Custom styles for a list |
stylesLoading | object, | {} | Custom styles for a loading indicator |
textInputProps | object | {} | Custom TextInput props |
requiredCharactersBeforeSearch | number | 2 | Component wont fetch places unless string length is equal this prop |
requiredTimeBeforeSearch | number | 1000 | Idle time on text input before component will fetch places |
onSelect | func | Function called when you select a place | |
onChangeText | func | Method triggered when TextInput is changed. Returning query and this. |
<PlacesInput
placeHolder={'Some placeholder'}
stylesContainer={{
position: 'relative',
alignSelf: 'stretch',
margin: 0,
top: 0,
left: 0,
right: 0,
bottom: 0,
shadowOpacity: 0,
borderColor: '#dedede',
borderWidth: 1,
marginBottom: 10
}}
stylesList={{
top: 50,
borderColor: '#dedede',
borderLeftWidth: 1,
borderRightWidth: 1,
borderBottomWidth: 1,
left: -1,
right: -1
}}
googleApiKey={GOOGLE_API_KEY}
onSelect={place => this.setState({place})}
/>
<PlacesInput
placeHolder={'Some placeholder'}
queryCountries={['pl', 'fr']}
googleApiKey={GOOGLE_API_KEY}
onSelect={place => this.setState({place})}
/>
<PlacesInput
placeHolder={'Some placeholder'}
searchRadius={500}
searchLatitude={51.905070}
searchLongitude={19.458834}
googleApiKey={GOOGLE_API_KEY}
onSelect={place => this.setState({place})}
/>
<PlacesInput
placeHolder={'Some placeholder'}
queryTypes="establishment"
googleApiKey={GOOGLE_API_KEY}
onSelect={place => this.setState({place})}
/>
If on click is not working and component is inside a ScrollView make sure to add keyboardShouldPersistTaps = always.
<ScrollView
keyboardShouldPersistTaps="always"