UNPKG

react-mapbox-gl-geocoder

Version:

Simple react autocomplete for geocoding locations using [Mapbox API](https://www.mapbox.com/api-documentation/?language=JavaScript#introduction). You can use it with [react-map-gl](https://github.com/uber/react-map-gl) to pan to found locations.

107 lines (82 loc) 4.19 kB
# react-mapbox-gl-geocoder Simple react autocomplete for geocoding locations using [Mapbox API](https://www.mapbox.com/api-documentation/?language=JavaScript#introduction). You can use it with [react-map-gl](https://github.com/uber/react-map-gl) to pan to found locations. [![NPM](https://img.shields.io/npm/v/react-mapbox-gl-geocoder.svg)](https://www.npmjs.com/package/react-mapbox-gl-geocoder) [![JavaScript Style Guide](https://img.shields.io/badge/code_style-standard-brightgreen.svg)](https://standardjs.com) ## Install ```bash npm install --save react-mapbox-gl-geocoder # or yarn add react-mapbox-gl-geocoder ``` ## Usage ```jsx import React, {Component} from 'react' import Geocoder from 'react-mapbox-gl-geocoder' import ReactMapGL from 'react-map-gl' import './index.css' const mapAccess = { mapboxApiAccessToken: process.env.REACT_APP_MAPBOX_API_ACCESS_TOKEN } const mapStyle = { width: '100%', height: 600 } const queryParams = { country: 'us' } class App extends Component { state = { viewport: {} } onSelected = (viewport, item) => { this.setState({viewport}); console.log('Selected: ', item) } render() { const {viewport} = this.state return ( <div> <Geocoder {...mapAccess} onSelected={this.onSelected} viewport={viewport} hideOnSelect={true} queryParams={queryParams} /> <ReactMapGL {...mapAccess} {...viewport} {...mapStyle} onViewportChange={(newViewport) => this.setState({viewport: newViewport})} /> </div> ) } } ``` ## Props | Name | Type | Description | Default | | -------------------- | ----------------- | ----------- | ------- | | mapboxApiAccessToken | (required) string | [Mapbox Access Token](https://www.mapbox.com/help/define-access-token/) | - | | timeout | int | Debounce between pressing the key and quering the results | 300 | | viewport | object | [Map Viewport](https://uber.github.io/react-map-gl/#/documentation/api-reference/static-map?section=map-state) | - | | onSelected | (required) function(viewport, item) | Receives selected item and the viewport to set for the selected [item](https://www.mapbox.com/api-documentation/?language=JavaScript#response-object) | - | | transitionDuration | int | Duration of the smooth transition | 0 | | hideOnSelect | bool | Whether to hide results on select or not | false | | updateInputOnSelect | bool | Whether to set the input value to the selected location | false | | pointZoom | int | Zoom to set if a specific location (without bbox) is selected | 16 | | formatItem | function(item) | Function used for formatting results | item => item.place_name | | className | string | Class to add to the top component | - | | queryParams | object | Query parameters to use when searching of the results, you can see available options [here](https://www.mapbox.com/api-documentation/?language=JavaScript#search-for-places) | - | | limit | int | Limit of the results | 5 | | localGeocoder | function(queryString) | Function to supplement local results to geocoder | - | | initialInputValue | string | The initial input value | '' | ## Styling This component does NOT come with any styles. You can style it yourself by using classes: | Class name | Description | | --- | --- | | .react-geocoder | component wrapper class | | .react-geocoder-results | results wrapper class | | .react-geocoder-item | single result class | ### Replacing components You can even supplement your own components: | Property name | Passed Properties | Properties description | | --- | --- | --- | | inputComponent | onChange | Function to call when the text changes | | itemComponent | [item](https://www.mapbox.com/api-documentation/?language=JavaScript#response-object), onClick, children | children is item formatted to display | ## License MIT © [groinder](https://github.com/groinder)