UNPKG

yandex-map-react

Version:

Yandex map react

195 lines (152 loc) 7.69 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); 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 _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _reactDom = require('react-dom'); var _reactDom2 = _interopRequireDefault(_reactDom); var _BalloonLayout = require('./BalloonLayout'); var _BalloonLayout2 = _interopRequireDefault(_BalloonLayout); var _MarkerLayout = require('./MarkerLayout'); var _MarkerLayout2 = _interopRequireDefault(_MarkerLayout); var _MarkerController = require('./controllers/MarkerController'); var _MarkerController2 = _interopRequireDefault(_MarkerController); var _geoObject = require('./apiEventsLists/geoObject'); var _geoObject2 = _interopRequireDefault(_geoObject); var _decorators = require('./utils/decorators'); 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 MapMarker = function (_Component) { _inherits(MapMarker, _Component); function MapMarker(props) { _classCallCheck(this, MapMarker); var _this = _possibleConstructorReturn(this, (MapMarker.__proto__ || Object.getPrototypeOf(MapMarker)).call(this, props)); _this.options = {}; return _this; } _createClass(MapMarker, [{ key: 'componentDidUpdate', value: function componentDidUpdate(prevProps) { var _this2 = this; var _props = this.props, lat = _props.lat, lon = _props.lon, children = _props.children, properties = _props.properties, options = _props.options, balloonState = _props.balloonState; if (lat !== prevProps.lat || lon !== prevProps.lon) { this._controller.setPosition(this.context.coordorder === 'longlat' ? [lon, lat] : [lat, lon]); } Object.keys(properties || {}).forEach(function (propName) { if (!prevProps.properties || properties[propName] !== prevProps.properties[propName]) { _this2._controller.setProperty(propName, properties[propName]); } }); Object.keys(options || {}).forEach(function (optName) { if (!prevProps.options || options[optName] !== prevProps.options[optName]) { _this2._controller.setOption(optName, options[optName]); } }); this._controller.setBalloonState(balloonState); if (children != prevProps.children) { this._clearLayouts(); this._setupLayouts(); } } }, { key: 'componentDidMount', value: function componentDidMount() { var _props2 = this.props, lat = _props2.lat, lon = _props2.lon, properties = _props2.properties, options = _props2.options, balloonState = _props2.balloonState; var coords = this.context.coordorder === 'longlat' ? [lon, lat] : [lat, lon]; this._controller = new _MarkerController2.default(coords, properties, options, balloonState); this._setupLayouts(); this._setupEvents(); this.context.mapController.appendMarker(this._controller); } }, { key: 'componentWillUnmount', value: function componentWillUnmount() { this._clearLayouts(); this._controller.destroy(); } }, { key: 'getController', value: function getController() { return this._controller ? this._controller : null; } }, { key: '_setupLayouts', value: function _setupLayouts() { var _this3 = this; _react2.default.Children.toArray(this.props.children).forEach(function (component) { if (component.type === _BalloonLayout2.default) { _this3._setupBalloonLayout(component); } if (component.type === _MarkerLayout2.default) { _this3._setupMarkerLayout(component); } }); } }, { key: '_setupMarkerLayout', value: function _setupMarkerLayout(component) { this._markerElement = document.createElement('div'); this._markerElement.className = 'icon-content'; this._markerElement.style.display = 'inline-block'; _reactDom2.default.render(component, this._markerElement); this._controller.setLayout('iconLayout', this._markerElement); } }, { key: '_setupBalloonLayout', value: function _setupBalloonLayout(component) { this._balloonElement = document.createElement('div'); _reactDom2.default.render(component, this._balloonElement); this._controller.setLayout('balloonLayout', this._balloonElement); } }, { key: '_clearLayouts', value: function _clearLayouts() { if (this._markerElement) { _reactDom2.default.unmountComponentAtNode(this._markerElement); this._markerElement = null; } if (this._balloonElement) { _reactDom2.default.unmountComponentAtNode(this._balloonElement); this._balloonElement = null; } } }, { key: 'render', value: function render() { return null; } }]); return MapMarker; }(_react.Component); MapMarker.propTypes = { lat: _propTypes2.default.number.isRequired, lon: _propTypes2.default.number.isRequired, properties: _propTypes2.default.object, options: _propTypes2.default.object, balloonState: _propTypes2.default.oneOf(['opened', 'closed']) }; MapMarker.defaultProps = { balloonState: 'closed' }; MapMarker.contextTypes = { mapController: _propTypes2.default.object, coordorder: _propTypes2.default.oneOf(['latlong', 'longlat']) }; exports.default = (0, _decorators.eventsDecorator)(MapMarker, { supportEvents: _geoObject2.default });