rc-leaflet
Version:
React Map Components of Leaflet
169 lines (168 loc) • 6.63 kB
JavaScript
;
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __rest = (this && this.__rest) || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
t[p[i]] = s[p[i]];
}
return t;
};
var __values = (this && this.__values) || function (o) {
var m = typeof Symbol === "function" && o[Symbol.iterator], i = 0;
if (m) return m.call(o);
return {
next: function () {
if (o && i >= o.length) o = void 0;
return { value: o && o[i++], done: !o };
}
};
};
var __read = (this && this.__read) || function (o, n) {
var m = typeof Symbol === "function" && o[Symbol.iterator];
if (!m) return o;
var i = m.call(o), r, ar = [], e;
try {
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
}
catch (error) { e = { error: error }; }
finally {
try {
if (r && !r.done && (m = i["return"])) m.call(i);
}
finally { if (e) throw e.error; }
}
return ar;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var react_1 = require("react");
var react_dom_1 = require("react-dom");
var prop_types_1 = __importDefault(require("prop-types"));
var leaflet_1 = __importDefault(require("leaflet"));
var PropTypes_1 = require("../../util/PropTypes");
var Context_1 = __importDefault(require("../RCMap/Context"));
var DivOverlay = /** @class */ (function (_super) {
__extends(DivOverlay, _super);
function DivOverlay(props, context) {
var _this = _super.call(this, props, context) || this;
_this.onOpen = function (e) {
var onOpen = _this.props.onOpen;
_this.forceUpdate(function () { return onOpen && onOpen(e); });
};
_this.onClose = function (e) {
var onClose = _this.props.onClose;
if (onClose) {
onClose(e);
}
};
var layer = props.layer, position = props.position, children = props.children, onOpen = props.onOpen, onClose = props.onClose, options = __rest(props, ["layer", "position", "children", "onOpen", "onClose"]);
_this.instance = _this.createInstance(options, context);
_this.instance.on({ add: _this.onOpen, remove: _this.onClose });
return _this;
}
DivOverlay.prototype.componentDidMount = function () {
var _a = this.props, layer = _a.layer, position = _a.position;
var overlay = this.instance;
if (layer) {
this.bindOnLayer(layer);
}
else if (position) {
overlay.setLatLng(position);
if (this.context.map) {
this.openOnMap();
}
}
};
DivOverlay.prototype.componentDidUpdate = function (prevProps) {
var prevLayer = prevProps.layer, prevPosition = prevProps.position;
var _a = this.props, layer = _a.layer, position = _a.position, onOpen = _a.onOpen, onClose = _a.onClose, children = _a.children, options = __rest(_a, ["layer", "position", "onOpen", "onClose", "children"]);
var overlay = this.instance;
if (prevLayer) {
if (layer !== prevLayer) {
this.unbindOnLayer(prevLayer);
}
}
else if (this.context.map && prevPosition && !position) {
this.closeOnMap();
}
this.update(options);
if (layer) {
if (layer !== prevLayer) {
this.bindOnLayer(layer);
}
}
else if (position) {
overlay.setLatLng(position);
if (this.context.map && !overlay.isOpen()) {
this.openOnMap();
}
}
};
DivOverlay.prototype.componentWillUnmount = function () {
this.instance.remove();
};
DivOverlay.prototype.update = function (options) {
var e_1, _a;
var overlay = this.instance;
try {
for (var _b = __values(Object.entries(options)), _c = _b.next(); !_c.done; _c = _b.next()) {
var _d = __read(_c.value, 2), key = _d[0], value = _d[1];
if (value !== overlay.options[key]) {
overlay.options[key] = value;
}
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
}
finally { if (e_1) throw e_1.error; }
}
overlay.update();
};
DivOverlay.prototype.render = function () {
var _a = this.props, target = _a.target, children = _a.children;
var overlay = this.instance;
if (overlay._contentNode) {
var content = children;
if (typeof children === 'function') {
content = target ? children(target) : null;
}
return react_dom_1.createPortal(content, overlay._contentNode);
}
return null;
};
DivOverlay.propTypes = {
offset: PropTypes_1.Pixel,
zoomAnimation: prop_types_1.default.bool,
className: prop_types_1.default.string,
pane: prop_types_1.default.string,
layer: prop_types_1.default.instanceOf(leaflet_1.default.Layer),
position: PropTypes_1.Point,
children: prop_types_1.default.oneOfType([prop_types_1.default.node, prop_types_1.default.func]),
onOpen: prop_types_1.default.func,
onClose: prop_types_1.default.func
};
DivOverlay.contextType = Context_1.default;
return DivOverlay;
}(react_1.PureComponent));
exports.default = DivOverlay;