@globalfishingwatch/react-map-gl
Version:
A React wrapper for MapboxGL-js and overlay API.
98 lines (79 loc) • 3.01 kB
JavaScript
;
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var React = _interopRequireWildcard(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _draggableControl = _interopRequireWildcard(require("./draggable-control"));
var _crispPixel = require("../utils/crisp-pixel");
var propTypes = Object.assign({}, _draggableControl.draggableControlPropTypes, {
className: _propTypes["default"].string,
longitude: _propTypes["default"].number.isRequired,
latitude: _propTypes["default"].number.isRequired
});
var defaultProps = Object.assign({}, _draggableControl.draggableControlDefaultProps, {
className: ''
});
function getPosition(_ref) {
var props = _ref.props,
state = _ref.state,
context = _ref.context;
var longitude = props.longitude,
latitude = props.latitude,
offsetLeft = props.offsetLeft,
offsetTop = props.offsetTop;
var dragPos = state.dragPos,
dragOffset = state.dragOffset;
if (dragPos && dragOffset) {
return [dragPos[0] + dragOffset[0], dragPos[1] + dragOffset[1]];
}
var _context$viewport$pro = context.viewport.project([longitude, latitude]),
_context$viewport$pro2 = (0, _slicedToArray2["default"])(_context$viewport$pro, 2),
x = _context$viewport$pro2[0],
y = _context$viewport$pro2[1];
x += offsetLeft;
y += offsetTop;
return [x, y];
}
function Marker(props) {
var thisRef = (0, _draggableControl["default"])(props);
var state = thisRef.state,
containerRef = thisRef.containerRef;
var draggable = props.draggable;
var dragPos = state.dragPos;
var _getPosition = getPosition(thisRef),
_getPosition2 = (0, _slicedToArray2["default"])(_getPosition, 2),
x = _getPosition2[0],
y = _getPosition2[1];
var transform = "translate(".concat((0, _crispPixel.crispPixel)(x), "px, ").concat((0, _crispPixel.crispPixel)(y), "px)");
var cursor = draggable ? dragPos ? 'grabbing' : 'grab' : 'auto';
var control = (0, React.useMemo)(function () {
var containerStyle = {
position: 'absolute',
left: 0,
top: 0,
transform: transform,
cursor: cursor
};
return React.createElement("div", {
className: "mapboxgl-marker ".concat(props.className),
ref: thisRef.containerRef,
style: containerStyle
}, props.children);
}, [props.className]);
var container = containerRef.current;
if (container) {
container.style.transform = transform;
container.style.cursor = cursor;
}
return control;
}
Marker.defaultProps = defaultProps;
Marker.propTypes = propTypes;
var _default = Marker;
exports["default"] = _default;
//# sourceMappingURL=marker.js.map