105 lines
3.0 KiB
JavaScript
105 lines
3.0 KiB
JavaScript
"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; |