Skip to content

Instantly share code, notes, and snippets.

@jgimbel
Last active March 23, 2024 08:08
Show Gist options
  • Save jgimbel/6a36d60e28aaf453d0093ddc47f36533 to your computer and use it in GitHub Desktop.
Save jgimbel/6a36d60e28aaf453d0093ddc47f36533 to your computer and use it in GitHub Desktop.
//Example Usage of custom control
export default ({lat, lng, google}) => (
<GoogleMap
defaultCenter={{lat, lng}}
defaultZoom={14}
minZoom={6}
google={google}
containerStyle={{ height: '575px', width: '100%', position: 'relative' }}
>
<Marker position={{lat, lng}} />
<MapControl position={google.maps.ControlPosition.BOTTOM_CENTER}>
<div>That was easy</div>
</MapControl>
</GoogleMap>
)
import { Component } from 'react'
import { createPortal } from 'react-dom'
import { MAP } from 'react-google-maps/lib/constants'
import PropTypes from 'prop-types'
export default class MapControl extends Component {
static contextTypes = { [MAP]: PropTypes.object }
componentWillMount() {
this.map = this.context[MAP]
this.controlDiv = document.createElement('div')
this.map.controls[this.props.position].push(this.controlDiv)
}
componentWillUnmount() {
this.map.controls[this.props.position].removeAt(this.divIndex)
}
render() {
return createPortal(this.props.children, this.controlDiv)
}
}
@jgimbel
Copy link
Author

jgimbel commented May 3, 2020

Wrap the map component with the withScript HOC so the maps library is loaded.

@Fernando-Abreu
Copy link

With this solution, my control was "blinking" every time the map re-rendered, but this didn't happen when I used this solution instead.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment