205 lines
6 KiB
JavaScript
205 lines
6 KiB
JavaScript
"use strict"
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true,
|
|
})
|
|
|
|
var _objectWithoutProperties2 = require("babel-runtime/helpers/objectWithoutProperties")
|
|
|
|
var _objectWithoutProperties3 = _interopRequireDefault(
|
|
_objectWithoutProperties2
|
|
)
|
|
|
|
var _defineProperty2 = require("babel-runtime/helpers/defineProperty")
|
|
|
|
var _defineProperty3 = _interopRequireDefault(_defineProperty2)
|
|
|
|
var _getPrototypeOf = require("babel-runtime/core-js/object/get-prototype-of")
|
|
|
|
var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf)
|
|
|
|
var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck")
|
|
|
|
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2)
|
|
|
|
var _createClass2 = require("babel-runtime/helpers/createClass")
|
|
|
|
var _createClass3 = _interopRequireDefault(_createClass2)
|
|
|
|
var _possibleConstructorReturn2 = require("babel-runtime/helpers/possibleConstructorReturn")
|
|
|
|
var _possibleConstructorReturn3 = _interopRequireDefault(
|
|
_possibleConstructorReturn2
|
|
)
|
|
|
|
var _inherits2 = require("babel-runtime/helpers/inherits")
|
|
|
|
var _inherits3 = _interopRequireDefault(_inherits2)
|
|
|
|
var _bind2 = require("lodash/bind")
|
|
|
|
var _bind3 = _interopRequireDefault(_bind2)
|
|
|
|
exports.withGoogleMap = withGoogleMap
|
|
|
|
var _warning = require("warning")
|
|
|
|
var _warning2 = _interopRequireDefault(_warning)
|
|
|
|
var _invariant = require("invariant")
|
|
|
|
var _invariant2 = _interopRequireDefault(_invariant)
|
|
|
|
var _recompose = require("recompose")
|
|
|
|
var _propTypes = require("prop-types")
|
|
|
|
var _propTypes2 = _interopRequireDefault(_propTypes)
|
|
|
|
var _react = require("react")
|
|
|
|
var _react2 = _interopRequireDefault(_react)
|
|
|
|
var _constants = require("./constants")
|
|
|
|
function _interopRequireDefault(obj) {
|
|
return obj && obj.__esModule ? obj : { default: obj }
|
|
}
|
|
|
|
/* global google */
|
|
function withGoogleMap(BaseComponent) {
|
|
var factory = _react2.default.createFactory(BaseComponent)
|
|
|
|
var Container = (function(_React$PureComponent) {
|
|
;(0, _inherits3.default)(Container, _React$PureComponent)
|
|
|
|
function Container() {
|
|
var _ref
|
|
|
|
var _temp, _this, _ret
|
|
|
|
;(0, _classCallCheck3.default)(this, Container)
|
|
|
|
for (
|
|
var _len = arguments.length, args = Array(_len), _key = 0;
|
|
_key < _len;
|
|
_key++
|
|
) {
|
|
args[_key] = arguments[_key]
|
|
}
|
|
|
|
return (
|
|
(_ret = ((_temp = ((_this = (0, _possibleConstructorReturn3.default)(
|
|
this,
|
|
(_ref =
|
|
Container.__proto__ ||
|
|
(0, _getPrototypeOf2.default)(Container)).call.apply(
|
|
_ref,
|
|
[this].concat(args)
|
|
)
|
|
)),
|
|
_this)),
|
|
(_this.state = {
|
|
map: null,
|
|
}),
|
|
(_this.handleComponentMount = (0, _bind3.default)(
|
|
_this.handleComponentMount,
|
|
_this
|
|
)),
|
|
_temp)),
|
|
(0, _possibleConstructorReturn3.default)(_this, _ret)
|
|
)
|
|
}
|
|
|
|
;(0, _createClass3.default)(Container, [
|
|
{
|
|
key: "getChildContext",
|
|
value: function getChildContext() {
|
|
return (0, _defineProperty3.default)(
|
|
{},
|
|
_constants.MAP,
|
|
this.state.map
|
|
)
|
|
},
|
|
},
|
|
{
|
|
key: "componentWillMount",
|
|
value: function componentWillMount() {
|
|
var _props = this.props,
|
|
containerElement = _props.containerElement,
|
|
mapElement = _props.mapElement
|
|
|
|
;(0, _invariant2.default)(
|
|
!!containerElement && !!mapElement,
|
|
"Required props containerElement or mapElement is missing. You need to provide both of them.\n The `google.maps.Map` instance will be initialized on mapElement and it's wrapped by containerElement.\nYou need to provide both of them since Google Map requires the DOM to have height when initialized."
|
|
)
|
|
},
|
|
},
|
|
{
|
|
key: "handleComponentMount",
|
|
value: function handleComponentMount(node) {
|
|
if (this.state.map || node === null) {
|
|
return
|
|
}
|
|
;(0, _warning2.default)(
|
|
"undefined" !== typeof google,
|
|
"Make sure you've put a <script> tag in your <head> element to load Google Maps JavaScript API v3.\n If you're looking for built-in support to load it for you, use the \"async/ScriptjsLoader\" instead.\n See https://github.com/tomchentw/react-google-maps/pull/168"
|
|
)
|
|
// https://developers.google.com/maps/documentation/javascript/3.exp/reference#Map
|
|
var map = new google.maps.Map(node)
|
|
this.setState({ map: map })
|
|
},
|
|
},
|
|
{
|
|
key: "render",
|
|
value: function render() {
|
|
var _props2 = this.props,
|
|
containerElement = _props2.containerElement,
|
|
mapElement = _props2.mapElement,
|
|
restProps = (0, _objectWithoutProperties3.default)(_props2, [
|
|
"containerElement",
|
|
"mapElement",
|
|
])
|
|
var map = this.state.map
|
|
|
|
if (map) {
|
|
return _react2.default.cloneElement(
|
|
containerElement,
|
|
{},
|
|
_react2.default.cloneElement(mapElement, {
|
|
ref: this.handleComponentMount,
|
|
}),
|
|
_react2.default.createElement("div", null, factory(restProps))
|
|
)
|
|
} else {
|
|
return _react2.default.cloneElement(
|
|
containerElement,
|
|
{},
|
|
_react2.default.cloneElement(mapElement, {
|
|
ref: this.handleComponentMount,
|
|
}),
|
|
_react2.default.createElement("div", null)
|
|
)
|
|
}
|
|
},
|
|
},
|
|
])
|
|
return Container
|
|
})(_react2.default.PureComponent)
|
|
|
|
Container.displayName =
|
|
"withGoogleMap(" + (0, _recompose.getDisplayName)(BaseComponent) + ")"
|
|
Container.propTypes = {
|
|
containerElement: _propTypes2.default.node.isRequired,
|
|
mapElement: _propTypes2.default.node.isRequired,
|
|
}
|
|
Container.childContextTypes = (0, _defineProperty3.default)(
|
|
{},
|
|
_constants.MAP,
|
|
_propTypes2.default.object
|
|
)
|
|
|
|
return Container
|
|
}
|
|
|
|
exports.default = withGoogleMap
|