UNPKG

react-native-google-autocomplete

Version:

Using render props to make google autocomplete work nicely with any design.

152 lines (127 loc) 5.04 kB
# React-Native-Google-Autocomplete Using render props to make google autocomplete work nicely with any design. ## Installation `yarn add react-native-google-autocomplete` ## Props | Props | Descriptions | | ---------- | ------------------------------------------------------------------------------------------------------ | | apiKey | Your api key get from https://developers.google.com/places/documentation | | debounce | optional - default 300 | | language | optional - default en | | queryTypes | optional - default address - https://developers.google.com/places/web-service/autocomplete#place_types | | minLength | optional - default 2 - this is the min length of the term search before start | | components | optional - A grouping of places to which you would like to restrict your results. | | radius | optional - The distance (in meters) within which to return place results. | | lat | optional - The latitude. If provide lng is required | | lng | optional - The longitue. If provide lat is required | ## Render Props | Props | Descriptions | | ---------------- | -------------------------------------------------------------------------------------------------- | | inputValue | A string you can put to your input for controlled input | | handleTextChange | most important function this is the callback for the text change just put it inside your TextInput | | locationResults | The array result | | fetchDetails | Http call when you have the place_id, good when you want to get more info after click an item | | isSearching | Boolean if search is on | | clearSearch | Clear the search result, can be nice when you have a clear button next to your text input | *(clearSearch was previously clearSearchs) ## Results The locationResults give you this. The maximum result set by Google is 5 location by query. ```js export interface GoogleLocationResult { description: string; id: string; matched_substrings: Array<{ length: number; offset: number; }>; place_id: string; reference: string; structured_formatting: { main_text: string; secondary_text: string; main_text_matched_substrings: Array<{ length: number; }>; }; terms: Array<{ offset: number; value: string; }>; types: string[]; } ``` When call the fetchDetails this is what you got ```js export interface GoogleLocationDetailResult { adr_address: string; formatted_address: string; icon: string; id: string; name: string; place_id: string; scope: string; reference: string; url: string; utc_offset: number; vicinity: string; types: string[]; geometry: { location: { lat: number; lng: number; }; viewport: { [type: string]: { lat: number; lng: number; }; }; }; address_components: Array<{ long_name: string; short_name: string; types: string[]; }>; } ``` ## Examples ```js import { GoogleAutoComplete } from 'react-native-google-autocomplete'; function MyComponent() { return ( <GoogleAutoComplete apiKey="YOUR API KEY" debounce={300}> {({ inputValue, handleTextChange, locationResults, fetchDetails }) => ( <React.Fragment> <TextInput style={{ height: 40, width: 300, borderWidth: 1, paddingHorizontal: 16, }} value={inputValue} onChangeText={handleTextChange} placeholder="Location..." /> <ScrollView style={{ maxHeight: 100 }}> {locationResults.map((el, i) => ( <LocationItem {...el} fetchDetails={fetchDetails} key={String(i)} /> ))} </ScrollView> </React.Fragment> )} </GoogleAutoComplete> ); } ``` ## Typings You can import both result typing if you need for flow or typescript. ```js import { GoogleLocationDetailResult, GoogleLocationResult } from 'react-native-google-autocomplete'; ``` ## Restrict by country If you want to restrict the search by country you can add this as a props `components="country:ca"`. This here would example restrict it to Canada only.