rc-tile-map
Version:
198 lines (162 loc) • 8.3 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports['default'] = undefined;
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
var _class, _temp2;
var _lodash = require('lodash');
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
var _MapComponent2 = require('./MapComponent');
var _MapComponent3 = _interopRequireDefault(_MapComponent2);
var _children = require('./propTypes/children');
var _children2 = _interopRequireDefault(_children);
var _point = require('./propTypes/point');
var _point2 = _interopRequireDefault(_point);
var _layerContainer = require('./propTypes/layerContainer');
var _layerContainer2 = _interopRequireDefault(_layerContainer);
var _map = require('./propTypes/map');
var _map2 = _interopRequireDefault(_map);
var _viewport = require('./propTypes/viewport');
var _viewport2 = _interopRequireDefault(_viewport);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
var MapOptions = ['minZoom', 'maxZoom', 'mapType', 'enableHighResolution', 'enableAutoResize', 'enableMapClick'];
var Map = (_temp2 = _class = function (_MapComponent) {
_inherits(Map, _MapComponent);
function Map() {
var _ref;
var _temp, _this, _ret;
_classCallCheck(this, Map);
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = Map.__proto__ || Object.getPrototypeOf(Map)).call.apply(_ref, [this].concat(args))), _this), _this._updating = false, _this.bindContainer = function (container) {
_this.container = container;
}, _temp), _possibleConstructorReturn(_this, _ret);
}
_createClass(Map, [{
key: 'getChildContext',
value: function getChildContext() {
return {
layerContainer: this.componentInstance,
map: this.componentInstance
};
}
}, {
key: 'createComponentInstance',
value: function createComponentInstance(props) {
var center = props.center,
zoom = props.zoom,
disableScrollWheelZoom = props.disableScrollWheelZoom,
disableDoubleClickZoom = props.disableDoubleClickZoom;
var mapNow = new window.BMap.Map(this.container, (0, _lodash.pick)(props, MapOptions));
mapNow.centerAndZoom(center, zoom);
if (disableScrollWheelZoom) {
mapNow.disableScrollWheelZoom();
} else {
mapNow.enableScrollWheelZoom(true);
}
if (disableDoubleClickZoom) {
mapNow.disableDoubleClickZoom();
} else {
mapNow.enableDoubleClickZoom(true);
}
return mapNow;
}
}, {
key: 'updateComponentInstance',
value: function updateComponentInstance(fromProps, toProps) {
this._updating = true;
var center = toProps.center,
viewport = toProps.viewport,
maxZoom = toProps.maxZoom,
minZoom = toProps.minZoom,
zoom = toProps.zoom;
var centerChange = center && !(0, _lodash.isEqual)(center, fromProps.center);
var zoomChange = typeof zoom === 'number' && zoom !== fromProps.zoom;
if (viewport && !(0, _lodash.isEqual)(viewport, fromProps.viewport)) {
this.componentInstance.setViewport(viewport);
} else if (centerChange && zoomChange) {
this.componentInstance.centerAndZoom(center, zoom);
} else if (centerChange && !zoomChange) {
this.componentInstance.setCenter(center);
} else if (zoomChange && !centerChange) {
this.componentInstance.setZoom(zoom);
}
if (typeof maxZoom === 'number' && maxZoom !== fromProps.maxZoom) {
this.componentInstance.setMaxZoom(maxZoom);
}
if (typeof minZoom === 'number' && minZoom !== fromProps.minZoom) {
this.componentInstance.setMinZoom(minZoom);
}
this._updating = false;
}
}, {
key: 'componentDidMount',
value: function componentDidMount() {
this.componentInstance = this.createComponentInstance(this.props);
if (this.props.setComponentInstance) {
this.props.setComponentInstance(this.componentInstance);
}
_get(Map.prototype.__proto__ || Object.getPrototypeOf(Map.prototype), 'componentDidMount', this).call(this);
this.forceUpdate(); // Re-render now that componentInstance is created
}
}, {
key: 'componentDidUpdate',
value: function componentDidUpdate(prevProps) {
this.updateComponentInstance(prevProps, this.props);
}
}, {
key: 'componentWillUnmount',
value: function componentWillUnmount() {
_get(Map.prototype.__proto__ || Object.getPrototypeOf(Map.prototype), 'componentWillUnmount', this).call(this);
}
}, {
key: 'render',
value: function render() {
var map = this.componentInstance;
var children = map ? this.props.children : null;
return _react2['default'].createElement(
'div',
{ className: this.props.className, id: this.props.id, ref: this.bindContainer, style: this.props.style },
children
);
}
}]);
return Map;
}(_MapComponent3['default']), _class.defaultProps = {
mapType: window.BMAP_NORMAL_MAP,
enableAutoResize: true,
enableMapClick: true,
disableDoubleClickZoom: false,
disableScrollWheelZoom: false,
center: window.BMap && new window.BMap.Point(116.404, 39.915),
zoom: 11
}, _class.propTypes = {
minZoom: _propTypes2['default'].number,
maxZoom: _propTypes2['default'].number,
mapType: _propTypes2['default'].object,
enableAutoResize: _propTypes2['default'].bool,
enableMapClick: _propTypes2['default'].bool,
disableScrollWheelZoom: _propTypes2['default'].bool,
disableDoubleClickZoom: _propTypes2['default'].bool,
children: _children2['default'],
className: _propTypes2['default'].string,
id: _propTypes2['default'].string,
style: _propTypes2['default'].object,
viewport: _viewport2['default'],
center: _propTypes2['default'].oneOfType([_propTypes2['default'].string, _point2['default']]),
zoom: _propTypes2['default'].number
}, _class.childContextTypes = {
layerContainer: _layerContainer2['default'],
map: _map2['default']
}, _temp2);
exports['default'] = Map;
module.exports = exports['default'];