192 lines
5.7 KiB
JavaScript
192 lines
5.7 KiB
JavaScript
"use strict";
|
|
|
|
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
|
|
|
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
|
|
exports.__esModule = true;
|
|
exports.default = 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 = _interopRequireWildcard(require("react"));
|
|
|
|
var _warning = _interopRequireDefault(require("warning"));
|
|
|
|
var _context = require("./context");
|
|
|
|
var _updateClassName = require("./utils/updateClassName");
|
|
|
|
var _omit = _interopRequireDefault(require("./utils/omit"));
|
|
|
|
// flowlint sketchy-null-string:off
|
|
var idCounter = 0;
|
|
|
|
var uniqueId = function uniqueId() {
|
|
return ++idCounter;
|
|
};
|
|
|
|
var LEAFLET_PANES = ['tile', 'shadow', 'overlay', 'map', 'marker', 'tooltip', 'popup'];
|
|
var PANE_RE = /-*pane/gi;
|
|
|
|
var isLeafletPane = function isLeafletPane(name) {
|
|
return LEAFLET_PANES.indexOf(name.replace(PANE_RE, '')) !== -1;
|
|
};
|
|
|
|
var paneStyles = {
|
|
position: 'absolute',
|
|
top: 0,
|
|
right: 0,
|
|
bottom: 0,
|
|
left: 0
|
|
};
|
|
|
|
var Pane = /*#__PURE__*/function (_Component) {
|
|
(0, _inheritsLoose2.default)(Pane, _Component);
|
|
|
|
function Pane() {
|
|
var _this;
|
|
|
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
args[_key] = arguments[_key];
|
|
}
|
|
|
|
_this = _Component.call.apply(_Component, [this].concat(args)) || this;
|
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "state", {
|
|
name: undefined,
|
|
context: undefined
|
|
});
|
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "setStyle", function (_temp) {
|
|
var _ref = _temp === void 0 ? _this.props : _temp,
|
|
style = _ref.style,
|
|
className = _ref.className;
|
|
|
|
var pane = _this.getPane(_this.state.name);
|
|
|
|
if (pane) {
|
|
if (className) {
|
|
(0, _updateClassName.addClassName)(pane, className);
|
|
}
|
|
|
|
if (style) {
|
|
// Without the cast, Flow throws this error:
|
|
// Cannot assign style[key] to pane.style[key] because string
|
|
// is incompatible with number.
|
|
Object.keys(style).forEach(function (key) {
|
|
pane.style[key] = style[key];
|
|
});
|
|
}
|
|
}
|
|
});
|
|
return _this;
|
|
}
|
|
|
|
var _proto = Pane.prototype;
|
|
|
|
_proto.componentDidMount = function componentDidMount() {
|
|
this.createPane(this.props);
|
|
};
|
|
|
|
_proto.componentDidUpdate = function componentDidUpdate(prevProps) {
|
|
if (!this.state.name) {
|
|
// Do nothing if this.state.name is undefined due to errors or
|
|
// an invalid props.name value
|
|
return;
|
|
} // If the 'name' prop has changed the current pane is unmounted and a new
|
|
// pane is created.
|
|
|
|
|
|
if (this.props.name !== prevProps.name) {
|
|
this.removePane();
|
|
this.createPane(this.props);
|
|
} else {
|
|
// Remove the previous css class name from the pane if it has changed.
|
|
// setStyle() will take care of adding in the updated className
|
|
if (prevProps.className && this.props.className !== prevProps.className) {
|
|
var pane = this.getPane(this.state.name);
|
|
|
|
if (pane != null && prevProps.className != null) {
|
|
(0, _updateClassName.removeClassName)(pane, prevProps.className);
|
|
}
|
|
} // Update the pane's DOM node style and class
|
|
|
|
|
|
this.setStyle(this.props);
|
|
}
|
|
};
|
|
|
|
_proto.componentWillUnmount = function componentWillUnmount() {
|
|
this.removePane();
|
|
};
|
|
|
|
_proto.createPane = function createPane(props) {
|
|
var map = props.leaflet.map;
|
|
var name = props.name || "pane-" + uniqueId();
|
|
|
|
if (map != null && map.createPane != null) {
|
|
var isDefault = isLeafletPane(name);
|
|
var existing = isDefault || this.getPane(name);
|
|
|
|
if (existing == null) {
|
|
map.createPane(name, this.getParentPane());
|
|
} else {
|
|
var message = isDefault ? "You must use a unique name for a pane that is not a default leaflet pane (" + name + ")" : "A pane with this name already exists. (" + name + ")";
|
|
process.env.NODE_ENV !== "production" ? (0, _warning.default)(false, message) : void 0;
|
|
}
|
|
|
|
this.setState({
|
|
name: name,
|
|
context: (0, _extends2.default)({}, props.leaflet, {
|
|
pane: name
|
|
})
|
|
}, this.setStyle);
|
|
}
|
|
};
|
|
|
|
_proto.removePane = function removePane() {
|
|
// Remove the created pane
|
|
var name = this.state.name;
|
|
|
|
if (name != null) {
|
|
var pane = this.getPane(name);
|
|
if (pane != null && pane.remove) pane.remove();
|
|
var map = this.props.leaflet.map;
|
|
|
|
if (map != null && map._panes != null) {
|
|
map._panes = (0, _omit.default)(map._panes, name);
|
|
map._paneRenderers = (0, _omit.default)(map._paneRenderers, name);
|
|
}
|
|
}
|
|
};
|
|
|
|
_proto.getParentPane = function getParentPane() {
|
|
return this.getPane(this.props.pane || this.props.leaflet.pane);
|
|
};
|
|
|
|
_proto.getPane = function getPane(name) {
|
|
if (name != null && this.props.leaflet.map != null) {
|
|
return this.props.leaflet.map.getPane(name);
|
|
}
|
|
};
|
|
|
|
_proto.render = function render() {
|
|
var context = this.state.context;
|
|
return context ? /*#__PURE__*/_react.default.createElement(_context.LeafletProvider, {
|
|
value: context
|
|
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
style: paneStyles
|
|
}, this.props.children)) : null;
|
|
};
|
|
|
|
return Pane;
|
|
}(_react.Component);
|
|
|
|
var _default = (0, _context.withLeaflet)(Pane);
|
|
|
|
exports.default = _default; |