"use strict"; import _extends from "@babel/runtime/helpers/esm/extends"; import _assertThisInitialized from "@babel/runtime/helpers/esm/assertThisInitialized"; import _inheritsLoose from "@babel/runtime/helpers/esm/inheritsLoose"; import _defineProperty from "@babel/runtime/helpers/esm/defineProperty"; import { Component } from 'react'; export var EVENTS_RE = /^on(.+)$/i; var MapEvented = /*#__PURE__*/function (_Component) { _inheritsLoose(MapEvented, _Component); function MapEvented(props) { var _this; _this = _Component.call(this, props) || this; _defineProperty(_assertThisInitialized(_this), "_leafletEvents", void 0); _defineProperty(_assertThisInitialized(_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 = _extends({}, 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; }(Component); export { MapEvented as default };