@syncromatics/react-google-maps
Version:
React.js Google Maps integration component
136 lines (110 loc) • 3.2 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true,
})
var _bind2 = require("lodash/bind")
var _bind3 = _interopRequireDefault(_bind2)
var _isFunction2 = require("lodash/isFunction")
var _isFunction3 = _interopRequireDefault(_isFunction2)
var _reduce3 = require("lodash/reduce")
var _reduce4 = _interopRequireDefault(_reduce3)
var _forEach2 = require("lodash/forEach")
var _forEach3 = _interopRequireDefault(_forEach2)
var _lowerFirst2 = require("lodash/lowerFirst")
var _lowerFirst3 = _interopRequireDefault(_lowerFirst2)
var _has2 = require("lodash/has")
var _has3 = _interopRequireDefault(_has2)
exports.construct = construct
exports.componentDidMount = componentDidMount
exports.componentDidUpdate = componentDidUpdate
exports.componentWillUnmount = componentWillUnmount
function _interopRequireDefault(obj) {
return obj && obj.__esModule ? obj : { default: obj }
}
/* global google */
/* eslint-disable no-param-reassign */
function rdcUncontrolledAndControlledProps(acc, value, key) {
if ((0, _has3.default)(acc.prevProps, key)) {
var match = key.match(/^default(\S+)/)
if (match) {
var unprefixedKey = (0, _lowerFirst3.default)(match[1])
if (!(0, _has3.default)(acc.nextProps, unprefixedKey)) {
acc.nextProps[unprefixedKey] = acc.prevProps[key]
}
} else {
acc.nextProps[key] = acc.prevProps[key]
}
}
return acc
}
function applyUpdaterToNextProps(updaterMap, prevProps, nextProps, instance) {
;(0, _forEach3.default)(updaterMap, function(fn, key) {
var nextValue = nextProps[key]
if (nextValue !== prevProps[key]) {
fn(instance, nextValue)
}
})
}
function construct(propTypes, updaterMap, prevProps, instance) {
var _reduce2 = (0, _reduce4.default)(
propTypes,
rdcUncontrolledAndControlledProps,
{
nextProps: {},
prevProps: prevProps,
}
),
nextProps = _reduce2.nextProps
applyUpdaterToNextProps(
updaterMap,
{
/* empty prevProps for construct */
},
nextProps,
instance
)
}
function componentDidMount(component, instance, eventMap) {
registerEvents(component, instance, eventMap)
}
function componentDidUpdate(
component,
instance,
eventMap,
updaterMap,
prevProps
) {
component.unregisterAllEvents()
applyUpdaterToNextProps(updaterMap, prevProps, component.props, instance)
registerEvents(component, instance, eventMap)
}
function componentWillUnmount(component) {
component.unregisterAllEvents()
}
function registerEvents(component, instance, eventMap) {
var registeredList = (0, _reduce4.default)(
eventMap,
function(acc, googleEventName, onEventName) {
if ((0, _isFunction3.default)(component.props[onEventName])) {
acc.push(
google.maps.event.addListener(
instance,
googleEventName,
component.props[onEventName]
)
)
}
return acc
},
[]
)
component.unregisterAllEvents = (0, _bind3.default)(
_forEach3.default,
null,
registeredList,
unregisterEvent
)
}
function unregisterEvent(registered) {
google.maps.event.removeListener(registered)
}