UNPKG

@randy.tarampi/jsx

Version:

Some common JSX components for www.randytarampi.ca

151 lines (133 loc) 7.13 kB
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; } function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; } import PropTypes from "prop-types"; import React, { PureComponent } from "react"; import { GoogleMap, withGoogleMap, withScriptjs } from "react-google-maps"; import { LoadingSpinner } from "../../loadingSpinner"; import { MAP_CONTAINER_HEIGHT_PX } from "../util"; import { GoogleMapStyles } from "./styles"; export var MAP_API_URL = "https://maps.googleapis.com/maps/api/js?key=".concat("AIzaSyCkMBpsbrY5zpOUAwyHsBGoHawaTPwg3yM", "&v=3.exp&libraries=geometry,drawing,places"); export * from "./markerClusterer"; export var ComposedGoogleMap = withScriptjs(withGoogleMap((_ref) => { var { googleMapRef } = _ref, props = _objectWithoutProperties(_ref, ["googleMapRef"]); return /*#__PURE__*/React.createElement(GoogleMap, _extends({ ref: googleMapRef }, props)); })); ComposedGoogleMap.defaultProps = { googleMapURL: MAP_API_URL, defaultZoom: 10, defaultCenter: { lat: 52.5018708, lng: 13.3655289 }, // defaultMapTypeId: "terrain", // NOTE-RT: google.maps.MapTypeId.TERRAIN defaultOptions: { minZoom: 2, styles: GoogleMapStyles, streetViewControl: true, streetViewControlOptions: { position: 6 // NOTE-RT: google.maps.ControlPosition.BOTTOM_LEFT }, zoomControl: true, zoomControlOptions: { position: 6 // NOTE-RT: google.maps.ControlPosition.BOTTOM_LEFT }, gestureHandling: "greedy" } }; var googleMapCallbacks = ["onDblClick", "onDragEnd", "onDragStart", "onMapTypeIdChanged", "onMouseMove", "onMouseOut", "onMouseOver", "onRightClick", "onTilesLoaded", "onBoundsChanged", "onCenterChanged", "onClick", "onDrag", "onHeadingChanged", "onIdle", "onProjectionChanged", "onResize", "onTiltChanged", "onZoomChanged"]; export class GoogleMapComponent extends PureComponent { constructor(passedProps) { var { googleMapRef } = passedProps, props = _objectWithoutProperties(passedProps, ["googleMapRef"]); var propsKeys = Object.keys(props); super(passedProps); this.googleMapRef = googleMapRef || /*#__PURE__*/React.createRef(); this.getGoogleMap = this.getGoogleMap.bind(this); this.passedGoogleMapCallbackProps = propsKeys.reduce((passedGoogleMapCallbackProps, propKey) => { if (googleMapCallbacks.includes(propKey)) { passedGoogleMapCallbackProps[propKey] = props[propKey].bind(this, this.getGoogleMap, props.id); } return passedGoogleMapCallbackProps; }, {}); if (this.props.instantiateMap) { this.props.instantiateMap(this.getGoogleMap, props.id); } } get googleMap() { return this.googleMapRef && this.googleMapRef.current; } componentWillUnmount() { if (!this.props.persistentMap) { if (this.props.clearMap) { this.props.clearMap(this.props.id); } } } getGoogleMap() { return this.googleMap; } render() { var _this$props = this.props, { className, mapContainerHeight, mapContainerHeightPx, containerElement, loadingElement, mapElement } = _this$props, props = _objectWithoutProperties(_this$props, ["className", "mapContainerHeight", "mapContainerHeightPx", "containerElement", "loadingElement", "mapElement"]); var actualMapContainerHeight = mapContainerHeight ? mapContainerHeight : "".concat(mapContainerHeightPx, "px"); return /*#__PURE__*/React.createElement(ComposedGoogleMap, _extends({ googleMapRef: this.googleMapRef }, _objectSpread(_objectSpread({ containerElement: containerElement ? containerElement : /*#__PURE__*/React.createElement("div", { className: "map__container map__container--google", style: { height: actualMapContainerHeight, minHeight: actualMapContainerHeight } }), loadingElement: loadingElement ? loadingElement : /*#__PURE__*/React.createElement("div", { className: ["map__loading"].concat(className).join(" "), style: { height: "100%" } }, /*#__PURE__*/React.createElement(LoadingSpinner, null)), mapElement: mapElement ? mapElement : /*#__PURE__*/React.createElement("div", { className: ["map map--google"].concat(className).join(" ") }) }, props), this.passedGoogleMapCallbackProps))); } } GoogleMapComponent.defaultProps = { mapContainerHeightPx: MAP_CONTAINER_HEIGHT_PX, persistentMap: true }; GoogleMapComponent.propTypes = { id: PropTypes.string.isRequired, googleMapRef: PropTypes.oneOfType([PropTypes.func, PropTypes.shape({ current: PropTypes.object })]), className: PropTypes.string, mapContainerHeight: PropTypes.string, mapContainerHeightPx: PropTypes.number, containerElement: PropTypes.node, loadingElement: PropTypes.node, mapElement: PropTypes.node, instantiateMap: PropTypes.func, clearMap: PropTypes.func, persistentMap: PropTypes.bool.isRequired }; export default GoogleMapComponent;