UNPKG

@globalfishingwatch/react-map-gl

Version:

A React wrapper for MapboxGL-js and overlay API.

82 lines (72 loc) 2.52 kB
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray"; import * as React from 'react'; import { useMemo } from 'react'; import PropTypes from 'prop-types'; import useDraggableControl, { draggableControlDefaultProps, draggableControlPropTypes } from './draggable-control'; import { crispPixel } from '../utils/crisp-pixel'; var propTypes = Object.assign({}, draggableControlPropTypes, { className: PropTypes.string, longitude: PropTypes.number.isRequired, latitude: PropTypes.number.isRequired }); var defaultProps = Object.assign({}, 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 = _slicedToArray(_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 = useDraggableControl(props); var state = thisRef.state, containerRef = thisRef.containerRef; var draggable = props.draggable; var dragPos = state.dragPos; var _getPosition = getPosition(thisRef), _getPosition2 = _slicedToArray(_getPosition, 2), x = _getPosition2[0], y = _getPosition2[1]; var transform = "translate(".concat(crispPixel(x), "px, ").concat(crispPixel(y), "px)"); var cursor = draggable ? dragPos ? 'grabbing' : 'grab' : 'auto'; var control = 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; export default Marker; //# sourceMappingURL=marker.js.map