"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports.default = exports.EVENTS_RE = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized")); var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = require("react"); var EVENTS_RE = /^on(.+)$/i; exports.EVENTS_RE = EVENTS_RE; var MapEvented = /*#__PURE__*/function (_Component) { (0, _inheritsLoose2.default)(MapEvented, _Component); function MapEvented(props) { var _this; _this = _Component.call(this, props) || this; (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "_leafletEvents", void 0); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "leafletElement", void 0); _this._leafletEvents = _this.extractLeafletEvents(props); return _this; } var _proto = MapEvented.prototype; _proto.componentDidMount = function componentDidMount() { this.bindLeafletEvents(this._leafletEvents); }; _proto.componentDidUpdate = function componentDidUpdate(_prevProps) { this._leafletEvents = this.bindLeafletEvents(this.extractLeafletEvents(this.props), this._leafletEvents); }; _proto.componentWillUnmount = function componentWillUnmount() { var _this2 = this; var el = this.leafletElement; if (!el) return; Object.keys(this._leafletEvents).forEach(function (ev) { el.off(ev, _this2._leafletEvents[ev]); }); }; _proto.extractLeafletEvents = function extractLeafletEvents(props) { return Object.keys(props).reduce(function (res, prop) { if (EVENTS_RE.test(prop)) { if (props[prop] != null) { var _key = prop.replace(EVENTS_RE, function (match, p) { return p.toLowerCase(); }); res[_key] = props[prop]; } } return res; }, {}); }; _proto.bindLeafletEvents = function bindLeafletEvents(next, prev) { if (next === void 0) { next = {}; } if (prev === void 0) { prev = {}; } var el = this.leafletElement; if (el == null || el.on == null) return {}; var diff = (0, _extends2.default)({}, prev); Object.keys(prev).forEach(function (ev) { if (next[ev] == null || prev[ev] !== next[ev]) { delete diff[ev]; el.off(ev, prev[ev]); } }); Object.keys(next).forEach(function (ev) { if (prev[ev] == null || next[ev] !== prev[ev]) { diff[ev] = next[ev]; el.on(ev, next[ev]); } }); return diff; }; _proto.fireLeafletEvent = function fireLeafletEvent(type, data) { var el = this.leafletElement; if (el) el.fire(type, data); }; return MapEvented; }(_react.Component); exports.default = MapEvented;