@syncromatics/react-google-maps
Version:
React.js Google Maps integration component
193 lines (150 loc) • 5.31 kB
JavaScript
"use strict"
Object.defineProperty(exports, "__esModule", {
value: true,
})
var _objectWithoutProperties2 = require("babel-runtime/helpers/objectWithoutProperties")
var _objectWithoutProperties3 = _interopRequireDefault(
_objectWithoutProperties2
)
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.withScriptjs = withScriptjs
var _invariant = require("invariant")
var _invariant2 = _interopRequireDefault(_invariant)
var _canUseDom = require("can-use-dom")
var _canUseDom2 = _interopRequireDefault(_canUseDom)
var _recompose = require("recompose")
var _propTypes = require("prop-types")
var _propTypes2 = _interopRequireDefault(_propTypes)
var _react = require("react")
var _react2 = _interopRequireDefault(_react)
function _interopRequireDefault(obj) {
return obj && obj.__esModule ? obj : { default: obj }
}
var LOADING_STATE_NONE = "NONE"
var LOADING_STATE_BEGIN = "BEGIN"
var LOADING_STATE_LOADED = "LOADED"
function withScriptjs(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 = {
loadingState: LOADING_STATE_NONE,
}),
(_this.isUnmounted = false),
(_this.handleLoaded = (0, _bind3.default)(_this.handleLoaded, _this)),
_temp)),
(0, _possibleConstructorReturn3.default)(_this, _ret)
)
}
;(0, _createClass3.default)(Container, [
{
key: "handleLoaded",
value: function handleLoaded() {
if (this.isUnmounted) {
return
}
this.setState({
loadingState: LOADING_STATE_LOADED,
})
},
},
{
key: "componentWillMount",
value: function componentWillMount() {
var _props = this.props,
loadingElement = _props.loadingElement,
googleMapURL = _props.googleMapURL
;(0, _invariant2.default)(
!!loadingElement && !!googleMapURL,
"Required props loadingElement or googleMapURL is missing. You need to provide both of them."
)
},
},
{
key: "componentDidMount",
value: function componentDidMount() {
var loadingState = this.state.loadingState
if (loadingState !== LOADING_STATE_NONE || !_canUseDom2.default) {
return
}
this.setState({
loadingState: LOADING_STATE_BEGIN,
})
// Don't load scriptjs as a dependency since we do not want this module be used on server side.
// eslint-disable-next-line global-require
var scriptjs = require("scriptjs")
var googleMapURL = this.props.googleMapURL
scriptjs(googleMapURL, this.handleLoaded)
},
},
{
key: "componentWillUnmount",
value: function componentWillUnmount() {
this.isUnmounted = true
},
},
{
key: "render",
value: function render() {
var _props2 = this.props,
loadingElement = _props2.loadingElement,
googleMapURL = _props2.googleMapURL,
restProps = (0, _objectWithoutProperties3.default)(_props2, [
"loadingElement",
"googleMapURL",
])
var loadingState = this.state.loadingState
if (loadingState === LOADING_STATE_LOADED) {
return factory(restProps)
} else {
return loadingElement
}
},
},
])
return Container
})(_react2.default.PureComponent)
Container.displayName =
"withScriptjs(" + (0, _recompose.getDisplayName)(BaseComponent) + ")"
Container.propTypes = {
loadingElement: _propTypes2.default.node.isRequired,
googleMapURL: _propTypes2.default.string.isRequired,
}
return Container
}
exports.default = withScriptjs