UNPKG

kepler.gl

Version:

kepler.gl is a webgl based application to visualize large scale location data in the browser

624 lines (546 loc) 81.9 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = MapContainerFactory; exports.Attribution = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties")); var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn")); var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = _interopRequireWildcard(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _reactMapGl = _interopRequireDefault(require("react-map-gl")); var _react2 = _interopRequireDefault(require("@deck.gl/react")); var _reselect = require("reselect"); var _viewportMercatorProject = _interopRequireDefault(require("viewport-mercator-project")); var _notificationsUtils = require("../utils/notifications-utils"); var _mapPopover = _interopRequireDefault(require("./map/map-popover")); var _mapControl = _interopRequireDefault(require("./map/map-control")); var _styledComponents = require("./common/styled-components"); var _editor = _interopRequireDefault(require("./editor/editor")); var _mapboxUtils = require("../layers/mapbox-utils"); var _glUtils = require("../utils/gl-utils"); var _mapboxUtils2 = require("../utils/map-style-utils/mapbox-utils"); var _layerUtils = require("../utils/layer-utils"); var _dBuildingLayer = _interopRequireDefault(require("../deckgl-layers/3d-building-layer/3d-building-layer")); var _defaultSettings = require("../constants/default-settings"); var _errorBoundary = _interopRequireDefault(require("./common/error-boundary")); var _observeDimensions = require("../utils/observe-dimensions"); var _locales = require("../localization/locales"); 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) { (0, _defineProperty2["default"])(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 _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } /** @type {{[key: string]: React.CSSProperties}} */ var MAP_STYLE = { container: { display: 'inline-block', position: 'relative', width: '100%', height: '100%' }, top: { position: 'absolute', top: '0px', pointerEvents: 'none', width: '100%', height: '100%' } }; var MAPBOXGL_STYLE_UPDATE = 'style.load'; var MAPBOXGL_RENDER = 'render'; var TRANSITION_DURATION = 0; var Attribution = function Attribution() { return /*#__PURE__*/_react["default"].createElement(_styledComponents.StyledAttrbution, null, /*#__PURE__*/_react["default"].createElement("div", { className: "attrition-logo" }, "Basemap by:", /*#__PURE__*/_react["default"].createElement("a", { className: "mapboxgl-ctrl-logo", target: "_blank", rel: "noopener noreferrer", href: "https://www.mapbox.com/", "aria-label": "Mapbox logo" })), /*#__PURE__*/_react["default"].createElement("div", { className: "attrition-link" }, /*#__PURE__*/_react["default"].createElement("a", { href: "https://kepler.gl/policy/", target: "_blank", rel: "noopener noreferrer" }, "\xA9 kepler.gl |", ' '), /*#__PURE__*/_react["default"].createElement("a", { href: "https://www.mapbox.com/about/maps/", target: "_blank", rel: "noopener noreferrer" }, "\xA9 Mapbox |", ' '), /*#__PURE__*/_react["default"].createElement("a", { href: "http://www.openstreetmap.org/copyright", target: "_blank", rel: "noopener noreferrer" }, "\xA9 OpenStreetMap |", ' '), /*#__PURE__*/_react["default"].createElement("a", { href: "https://www.mapbox.com/map-feedback/", target: "_blank", rel: "noopener noreferrer" }, /*#__PURE__*/_react["default"].createElement("strong", null, "Improve this map")))); }; exports.Attribution = Attribution; MapContainerFactory.deps = [_mapPopover["default"], _mapControl["default"], _editor["default"]]; function MapContainerFactory(MapPopover, MapControl, Editor) { var MapContainer = /*#__PURE__*/function (_Component) { (0, _inherits2["default"])(MapContainer, _Component); var _super = _createSuper(MapContainer); function MapContainer(_props) { var _this; (0, _classCallCheck2["default"])(this, MapContainer); _this = _super.call(this, _props); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_handleResize", function (dimensions) { var primary = _this.props.primary; if (primary) { var mapStateActions = _this.props.mapStateActions; if (dimensions && dimensions.width > 0 && dimensions.height > 0) { mapStateActions.updateMap(dimensions); } } }); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "layersSelector", function (props) { return props.layers; }); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "layerDataSelector", function (props) { return props.layerData; }); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "mapLayersSelector", function (props) { return props.mapLayers; }); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "layerOrderSelector", function (props) { return props.layerOrder; }); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "layersToRenderSelector", (0, _reselect.createSelector)(_this.layersSelector, _this.layerDataSelector, _this.mapLayersSelector, _layerUtils.prepareLayersToRender)); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "layersForDeckSelector", (0, _reselect.createSelector)(_this.layersSelector, _this.layerDataSelector, _layerUtils.prepareLayersForDeck)); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "filtersSelector", function (props) { return props.filters; }); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "polygonFilters", (0, _reselect.createSelector)(_this.filtersSelector, function (filters) { return filters.filter(function (f) { return f.type === _defaultSettings.FILTER_TYPES.polygon; }); })); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "mapboxLayersSelector", (0, _reselect.createSelector)(_this.layersSelector, _this.layerDataSelector, _this.layerOrderSelector, _this.layersToRenderSelector, _mapboxUtils.generateMapboxLayers)); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_onCloseMapPopover", function () { _this.props.visStateActions.onLayerClick(null); }); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_onLayerSetDomain", function (idx, colorDomain) { _this.props.visStateActions.layerConfigChange(_this.props.layers[idx], { colorDomain: colorDomain }); }); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_handleMapToggleLayer", function (layerId) { var _this$props = _this.props, _this$props$index = _this$props.index, mapIndex = _this$props$index === void 0 ? 0 : _this$props$index, visStateActions = _this$props.visStateActions; visStateActions.toggleLayerForMap(mapIndex, layerId); }); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_onMapboxStyleUpdate", function () { // force refresh mapboxgl layers _this.previousLayers = {}; _this._updateMapboxLayers(); if (typeof _this.props.onMapStyleLoaded === 'function') { _this.props.onMapStyleLoaded(_this._map); } }); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_setMapboxMap", function (mapbox) { if (!_this._map && mapbox) { _this._map = mapbox.getMap(); // i noticed in certain context we don't access the actual map element if (!_this._map) { return; } // bind mapboxgl event listener _this._map.on(MAPBOXGL_STYLE_UPDATE, _this._onMapboxStyleUpdate); _this._map.on(MAPBOXGL_RENDER, function () { if (typeof _this.props.onMapRender === 'function') { _this.props.onMapRender(_this._map); } }); } if (_this.props.getMapboxRef) { // The parent component can gain access to our MapboxGlMap by // providing this callback. Note that 'mapbox' will be null when the // ref is unset (e.g. when a split map is closed). _this.props.getMapboxRef(mapbox, _this.props.index); } }); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_onBeforeRender", function (_ref) { var gl = _ref.gl; (0, _glUtils.setLayerBlending)(gl, _this.props.layerBlending); }); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_onDeckError", function (error, layer) { var errorMessage = "An error in deck.gl: ".concat(error.message, " in ").concat(layer.id); var notificationId = "".concat(layer.id, "-").concat(error.message); // Throttle error notifications, as React doesn't like too many state changes from here. _this._deckGLErrorsElapsed = _this._deckGLErrorsElapsed || {}; var lastShown = _this._deckGLErrorsElapsed[notificationId]; if (!lastShown || lastShown < Date.now() - _defaultSettings.THROTTLE_NOTIFICATION_TIME) { _this._deckGLErrorsElapsed[notificationId] = Date.now(); // Create new error notification or update existing one with same id. // Update is required to preserve the order of notifications as they probably are going to "jump" based on order of errors. var uiStateActions = _this.props.uiStateActions; uiStateActions.addNotification((0, _notificationsUtils.errorNotification)({ message: errorMessage, id: notificationId })); } }); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_onViewportChange", function (viewState) { var width = viewState.width, height = viewState.height, restViewState = (0, _objectWithoutProperties2["default"])(viewState, ["width", "height"]); var primary = _this.props.primary; // react-map-gl sends 0,0 dimensions during initialization // after we have received proper dimensions from observeDimensions var next = _objectSpread(_objectSpread({}, width > 0 && height > 0 ? viewState : restViewState), {}, { // enabling transition in two maps may lead to endless update loops transitionDuration: primary ? TRANSITION_DURATION : 0 }); if (typeof _this.props.onViewStateChange === 'function') { _this.props.onViewStateChange(next); } _this.props.mapStateActions.updateMap(next); }); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_toggleMapControl", function (panelId) { var _this$props2 = _this.props, index = _this$props2.index, uiStateActions = _this$props2.uiStateActions; uiStateActions.toggleMapControl(panelId, index); }); _this.previousLayers = {// [layers.id]: mapboxLayerConfig }; _this._deck = null; _this._ref = /*#__PURE__*/(0, _react.createRef)(); return _this; } (0, _createClass2["default"])(MapContainer, [{ key: "componentDidMount", value: function componentDidMount() { (0, _observeDimensions.observeDimensions)(this._ref.current, this._handleResize); } }, { key: "componentWillUnmount", value: function componentWillUnmount() { // unbind mapboxgl event listener if (this._map) { this._map.off(MAPBOXGL_STYLE_UPDATE); this._map.off(MAPBOXGL_RENDER); } (0, _observeDimensions.unobserveDimensions)(this._ref.current); } }, { key: "_onDeckInitialized", value: function _onDeckInitialized(gl) { if (this.props.onDeckInitialized) { this.props.onDeckInitialized(this._deck, gl); } } }, { key: "_renderMapPopover", value: /* component render functions */ /* eslint-disable complexity */ function _renderMapPopover(layersToRender) { // TODO: move this into reducer so it can be tested var _this$props3 = this.props, mapState = _this$props3.mapState, hoverInfo = _this$props3.hoverInfo, clicked = _this$props3.clicked, datasets = _this$props3.datasets, interactionConfig = _this$props3.interactionConfig, layers = _this$props3.layers, _this$props3$mousePos = _this$props3.mousePos, mousePosition = _this$props3$mousePos.mousePosition, coordinate = _this$props3$mousePos.coordinate, pinned = _this$props3$mousePos.pinned; if (!mousePosition || !interactionConfig.tooltip) { return null; } var layerHoverProp = (0, _layerUtils.getLayerHoverProp)({ interactionConfig: interactionConfig, hoverInfo: hoverInfo, layers: layers, layersToRender: layersToRender, datasets: datasets }); var compareMode = interactionConfig.tooltip.config ? interactionConfig.tooltip.config.compareMode : false; var pinnedPosition = {}; var layerPinnedProp = null; if (pinned || clicked) { // project lnglat to screen so that tooltip follows the object on zoom var viewport = new _viewportMercatorProject["default"](mapState); var lngLat = clicked ? clicked.lngLat : pinned.coordinate; pinnedPosition = this._getHoverXY(viewport, lngLat); layerPinnedProp = (0, _layerUtils.getLayerHoverProp)({ interactionConfig: interactionConfig, hoverInfo: clicked, layers: layers, layersToRender: layersToRender, datasets: datasets }); if (layerHoverProp && layerPinnedProp) { layerHoverProp.primaryData = layerPinnedProp.data; layerHoverProp.compareType = interactionConfig.tooltip.config.compareType; } } var commonProp = { onClose: this._onCloseMapPopover, zoom: mapState.zoom, container: this._deck ? this._deck.canvas : undefined }; return /*#__PURE__*/_react["default"].createElement(_errorBoundary["default"], null, layerPinnedProp && /*#__PURE__*/_react["default"].createElement(MapPopover, (0, _extends2["default"])({}, pinnedPosition, commonProp, { layerHoverProp: layerPinnedProp, coordinate: interactionConfig.coordinate.enabled && (pinned || {}).coordinate, frozen: true, isBase: compareMode })), layerHoverProp && (!layerPinnedProp || compareMode) && /*#__PURE__*/_react["default"].createElement(MapPopover, (0, _extends2["default"])({ x: mousePosition[0], y: mousePosition[1] }, commonProp, { layerHoverProp: layerHoverProp, frozen: false, coordinate: interactionConfig.coordinate.enabled && coordinate }))); } /* eslint-enable complexity */ }, { key: "_getHoverXY", value: function _getHoverXY(viewport, lngLat) { var screenCoord = !viewport || !lngLat ? null : viewport.project(lngLat); return screenCoord && { x: screenCoord[0], y: screenCoord[1] }; } }, { key: "_renderDeckOverlay", value: function _renderDeckOverlay(layersForDeck) { var _this$props$deckGlPro, _this2 = this; var _this$props4 = this.props, mapState = _this$props4.mapState, mapStyle = _this$props4.mapStyle, layerData = _this$props4.layerData, layerOrder = _this$props4.layerOrder, layers = _this$props4.layers, visStateActions = _this$props4.visStateActions, mapboxApiAccessToken = _this$props4.mapboxApiAccessToken, mapboxApiUrl = _this$props4.mapboxApiUrl; // initialise layers from props if exists var deckGlLayers = ((_this$props$deckGlPro = this.props.deckGlProps) === null || _this$props$deckGlPro === void 0 ? void 0 : _this$props$deckGlPro.layers) || []; // wait until data is ready before render data layers if (layerData && layerData.length) { // last layer render first var dataLayers = layerOrder.slice().reverse().filter(function (idx) { return layersForDeck[layers[idx].id]; }).reduce(function (overlays, idx) { var layerCallbacks = { onSetLayerDomain: function onSetLayerDomain(val) { return _this2._onLayerSetDomain(idx, val); } }; var layerOverlay = (0, _layerUtils.renderDeckGlLayer)(_this2.props, layerCallbacks, idx); return overlays.concat(layerOverlay || []); }, []); deckGlLayers = deckGlLayers.concat(dataLayers); } if (mapStyle.visibleLayerGroups['3d building']) { deckGlLayers.push(new _dBuildingLayer["default"]({ id: '_keplergl_3d-building', mapboxApiAccessToken: mapboxApiAccessToken, mapboxApiUrl: mapboxApiUrl, threeDBuildingColor: mapStyle.threeDBuildingColor, updateTriggers: { getFillColor: mapStyle.threeDBuildingColor } })); } return /*#__PURE__*/_react["default"].createElement(_react2["default"], (0, _extends2["default"])({}, this.props.deckGlProps, { viewState: mapState, id: "default-deckgl-overlay", layers: deckGlLayers, onBeforeRender: this._onBeforeRender, onHover: visStateActions.onLayerHover, onClick: visStateActions.onLayerClick, onError: this._onDeckError, ref: function ref(comp) { if (comp && comp.deck && !_this2._deck) { _this2._deck = comp.deck; } }, onWebGLInitialized: function onWebGLInitialized(gl) { return _this2._onDeckInitialized(gl); } })); } }, { key: "_updateMapboxLayers", value: function _updateMapboxLayers() { var mapboxLayers = this.mapboxLayersSelector(this.props); if (!Object.keys(mapboxLayers).length && !Object.keys(this.previousLayers).length) { return; } (0, _mapboxUtils.updateMapboxLayers)(this._map, mapboxLayers, this.previousLayers); this.previousLayers = mapboxLayers; } }, { key: "_renderMapboxOverlays", value: function _renderMapboxOverlays() { if (this._map && this._map.isStyleLoaded()) { this._updateMapboxLayers(); } } }, { key: "_renderMap", value: /* eslint-disable complexity */ function _renderMap() { var _this$props5 = this.props, mapState = _this$props5.mapState, mapStyle = _this$props5.mapStyle, mapStateActions = _this$props5.mapStateActions, layers = _this$props5.layers, MapComponent = _this$props5.MapComponent, datasets = _this$props5.datasets, mapboxApiAccessToken = _this$props5.mapboxApiAccessToken, mapboxApiUrl = _this$props5.mapboxApiUrl, mapControls = _this$props5.mapControls, isExport = _this$props5.isExport, locale = _this$props5.locale, uiStateActions = _this$props5.uiStateActions, visStateActions = _this$props5.visStateActions, interactionConfig = _this$props5.interactionConfig, editor = _this$props5.editor, index = _this$props5.index, primary = _this$props5.primary; var layersToRender = this.layersToRenderSelector(this.props); var layersForDeck = this.layersForDeckSelector(this.props); var mapProps = _objectSpread(_objectSpread({}, mapState), {}, { width: '100%', height: '100%', preserveDrawingBuffer: true, mapboxApiAccessToken: mapboxApiAccessToken, mapboxApiUrl: mapboxApiUrl, onViewportChange: this._onViewportChange, transformRequest: _mapboxUtils2.transformRequest }); var isEdit = (mapControls.mapDraw || {}).active; var hasGeocoderLayer = layers.find(function (l) { return l.id === _defaultSettings.GEOCODER_LAYER_ID; }); var isSplit = Boolean(mapState.isSplit); return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(MapControl, { datasets: datasets, availableLocales: Object.keys(_locales.LOCALE_CODES), dragRotate: mapState.dragRotate, isSplit: isSplit, primary: primary, isExport: isExport, layers: layers, layersToRender: layersToRender, mapIndex: index, mapControls: mapControls, readOnly: this.props.readOnly, scale: mapState.scale || 1, top: interactionConfig.geocoder && interactionConfig.geocoder.enabled ? 52 : 0, editor: editor, locale: locale, onTogglePerspective: mapStateActions.togglePerspective, onToggleSplitMap: mapStateActions.toggleSplitMap, onMapToggleLayer: this._handleMapToggleLayer, onToggleMapControl: this._toggleMapControl, onSetEditorMode: visStateActions.setEditorMode, onSetLocale: uiStateActions.setLocale, onToggleEditorVisibility: visStateActions.toggleEditorVisibility }), /*#__PURE__*/_react["default"].createElement(MapComponent, (0, _extends2["default"])({}, mapProps, { key: "bottom", ref: this._setMapboxMap, mapStyle: mapStyle.bottomMapStyle, getCursor: this.props.hoverInfo ? function () { return 'pointer'; } : undefined, onMouseMove: this.props.visStateActions.onMouseMove }), this._renderDeckOverlay(layersForDeck), this._renderMapboxOverlays(), /*#__PURE__*/_react["default"].createElement(Editor, { index: index, datasets: datasets, editor: editor, filters: this.polygonFilters(this.props), isEnabled: isEdit, layers: layers, layersToRender: layersToRender, onDeleteFeature: visStateActions.deleteFeature, onSelect: visStateActions.setSelectedFeature, onUpdate: visStateActions.setFeatures, onTogglePolygonFilter: visStateActions.setPolygonFilterLayer, style: { pointerEvents: isEdit ? 'all' : 'none', position: 'absolute', display: editor.visible ? 'block' : 'none' } })), mapStyle.topMapStyle || hasGeocoderLayer ? /*#__PURE__*/_react["default"].createElement("div", { style: MAP_STYLE.top }, /*#__PURE__*/_react["default"].createElement(MapComponent, (0, _extends2["default"])({}, mapProps, { key: "top", mapStyle: mapStyle.topMapStyle }), this._renderDeckOverlay((0, _defineProperty2["default"])({}, _defaultSettings.GEOCODER_LAYER_ID, true)))) : null, this._renderMapPopover(layersToRender), !isSplit || index === 1 ? /*#__PURE__*/_react["default"].createElement(Attribution, null) : null); } }, { key: "render", value: function render() { var _this$props6 = this.props, mapState = _this$props6.mapState, mapStyle = _this$props6.mapStyle; return /*#__PURE__*/_react["default"].createElement(_styledComponents.StyledMapContainer, { ref: this._ref, style: MAP_STYLE.container, globe: mapState.globe }, mapStyle.bottomMapStyle && this._renderMap()); } }]); return MapContainer; }(_react.Component); (0, _defineProperty2["default"])(MapContainer, "propTypes", { // required datasets: _propTypes["default"].object, interactionConfig: _propTypes["default"].object.isRequired, layerBlending: _propTypes["default"].string.isRequired, layerOrder: _propTypes["default"].arrayOf(_propTypes["default"].any).isRequired, layerData: _propTypes["default"].arrayOf(_propTypes["default"].any).isRequired, layers: _propTypes["default"].arrayOf(_propTypes["default"].any).isRequired, filters: _propTypes["default"].arrayOf(_propTypes["default"].any).isRequired, mapState: _propTypes["default"].object.isRequired, mapControls: _propTypes["default"].object.isRequired, mapStyle: _propTypes["default"].object.isRequired, mousePos: _propTypes["default"].object.isRequired, mapboxApiAccessToken: _propTypes["default"].string.isRequired, mapboxApiUrl: _propTypes["default"].string, visStateActions: _propTypes["default"].object.isRequired, mapStateActions: _propTypes["default"].object.isRequired, uiStateActions: _propTypes["default"].object.isRequired, // optional primary: _propTypes["default"].bool, // primary one will be reporting its size to appState readOnly: _propTypes["default"].bool, isExport: _propTypes["default"].bool, clicked: _propTypes["default"].object, hoverInfo: _propTypes["default"].object, mapLayers: _propTypes["default"].object, onMapToggleLayer: _propTypes["default"].func, onMapStyleLoaded: _propTypes["default"].func, onMapRender: _propTypes["default"].func, getMapboxRef: _propTypes["default"].func, index: _propTypes["default"].number }); (0, _defineProperty2["default"])(MapContainer, "defaultProps", { MapComponent: _reactMapGl["default"], deckGlProps: {}, index: 0, primary: true }); MapContainer.displayName = 'MapContainer'; return MapContainer; } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL21hcC1jb250YWluZXIuanMiXSwibmFtZXMiOlsiTUFQX1NUWUxFIiwiY29udGFpbmVyIiwiZGlzcGxheSIsInBvc2l0aW9uIiwid2lkdGgiLCJoZWlnaHQiLCJ0b3AiLCJwb2ludGVyRXZlbnRzIiwiTUFQQk9YR0xfU1RZTEVfVVBEQVRFIiwiTUFQQk9YR0xfUkVOREVSIiwiVFJBTlNJVElPTl9EVVJBVElPTiIsIkF0dHJpYnV0aW9uIiwiTWFwQ29udGFpbmVyRmFjdG9yeSIsImRlcHMiLCJNYXBQb3BvdmVyRmFjdG9yeSIsIk1hcENvbnRyb2xGYWN0b3J5IiwiRWRpdG9yRmFjdG9yeSIsIk1hcFBvcG92ZXIiLCJNYXBDb250cm9sIiwiRWRpdG9yIiwiTWFwQ29udGFpbmVyIiwicHJvcHMiLCJkaW1lbnNpb25zIiwicHJpbWFyeSIsIm1hcFN0YXRlQWN0aW9ucyIsInVwZGF0ZU1hcCIsImxheWVycyIsImxheWVyRGF0YSIsIm1hcExheWVycyIsImxheWVyT3JkZXIiLCJsYXllcnNTZWxlY3RvciIsImxheWVyRGF0YVNlbGVjdG9yIiwibWFwTGF5ZXJzU2VsZWN0b3IiLCJwcmVwYXJlTGF5ZXJzVG9SZW5kZXIiLCJwcmVwYXJlTGF5ZXJzRm9yRGVjayIsImZpbHRlcnMiLCJmaWx0ZXJzU2VsZWN0b3IiLCJmaWx0ZXIiLCJmIiwidHlwZSIsIkZJTFRFUl9UWVBFUyIsInBvbHlnb24iLCJsYXllck9yZGVyU2VsZWN0b3IiLCJsYXllcnNUb1JlbmRlclNlbGVjdG9yIiwiZ2VuZXJhdGVNYXBib3hMYXllcnMiLCJ2aXNTdGF0ZUFjdGlvbnMiLCJvbkxheWVyQ2xpY2siLCJpZHgiLCJjb2xvckRvbWFpbiIsImxheWVyQ29uZmlnQ2hhbmdlIiwibGF5ZXJJZCIsImluZGV4IiwibWFwSW5kZXgiLCJ0b2dnbGVMYXllckZvck1hcCIsInByZXZpb3VzTGF5ZXJzIiwiX3VwZGF0ZU1hcGJveExheWVycyIsIm9uTWFwU3R5bGVMb2FkZWQiLCJfbWFwIiwibWFwYm94IiwiZ2V0TWFwIiwib24iLCJfb25NYXBib3hTdHlsZVVwZGF0ZSIsIm9uTWFwUmVuZGVyIiwiZ2V0TWFwYm94UmVmIiwiZ2wiLCJsYXllckJsZW5kaW5nIiwiZXJyb3IiLCJsYXllciIsImVycm9yTWVzc2FnZSIsIm1lc3NhZ2UiLCJpZCIsIm5vdGlmaWNhdGlvbklkIiwiX2RlY2tHTEVycm9yc0VsYXBzZWQiLCJsYXN0U2hvd24iLCJEYXRlIiwibm93IiwiVEhST1RUTEVfTk9USUZJQ0FUSU9OX1RJTUUiLCJ1aVN0YXRlQWN0aW9ucyIsImFkZE5vdGlmaWNhdGlvbiIsInZpZXdTdGF0ZSIsInJlc3RWaWV3U3RhdGUiLCJuZXh0IiwidHJhbnNpdGlvbkR1cmF0aW9uIiwib25WaWV3U3RhdGVDaGFuZ2UiLCJwYW5lbElkIiwidG9nZ2xlTWFwQ29udHJvbCIsIl9kZWNrIiwiX3JlZiIsImN1cnJlbnQiLCJfaGFuZGxlUmVzaXplIiwib2ZmIiwib25EZWNrSW5pdGlhbGl6ZWQiLCJsYXllcnNUb1JlbmRlciIsIm1hcFN0YXRlIiwiaG92ZXJJbmZvIiwiY2xpY2tlZCIsImRhdGFzZXRzIiwiaW50ZXJhY3Rpb25Db25maWciLCJtb3VzZVBvcyIsIm1vdXNlUG9zaXRpb24iLCJjb29yZGluYXRlIiwicGlubmVkIiwidG9vbHRpcCIsImxheWVySG92ZXJQcm9wIiwiY29tcGFyZU1vZGUiLCJjb25maWciLCJwaW5uZWRQb3NpdGlvbiIsImxheWVyUGlubmVkUHJvcCIsInZpZXdwb3J0IiwiV2ViTWVyY2F0b3JWaWV3cG9ydCIsImxuZ0xhdCIsIl9nZXRIb3ZlclhZIiwicHJpbWFyeURhdGEiLCJkYXRhIiwiY29tcGFyZVR5cGUiLCJjb21tb25Qcm9wIiwib25DbG9zZSIsIl9vbkNsb3NlTWFwUG9wb3ZlciIsInpvb20iLCJjYW52YXMiLCJ1bmRlZmluZWQiLCJlbmFibGVkIiwic2NyZWVuQ29vcmQiLCJwcm9qZWN0IiwieCIsInkiLCJsYXllcnNGb3JEZWNrIiwibWFwU3R5bGUiLCJtYXBib3hBcGlBY2Nlc3NUb2tlbiIsIm1hcGJveEFwaVVybCIsImRlY2tHbExheWVycyIsImRlY2tHbFByb3BzIiwibGVuZ3RoIiwiZGF0YUxheWVycyIsInNsaWNlIiwicmV2ZXJzZSIsInJlZHVjZSIsIm92ZXJsYXlzIiwibGF5ZXJDYWxsYmFja3MiLCJvblNldExheWVyRG9tYWluIiwidmFsIiwiX29uTGF5ZXJTZXREb21haW4iLCJsYXllck92ZXJsYXkiLCJjb25jYXQiLCJ2aXNpYmxlTGF5ZXJHcm91cHMiLCJwdXNoIiwiVGhyZWVEQnVpbGRpbmdMYXllciIsInRocmVlREJ1aWxkaW5nQ29sb3IiLCJ1cGRhdGVUcmlnZ2VycyIsImdldEZpbGxDb2xvciIsIl9vbkJlZm9yZVJlbmRlciIsIm9uTGF5ZXJIb3ZlciIsIl9vbkRlY2tFcnJvciIsImNvbXAiLCJkZWNrIiwiX29uRGVja0luaXRpYWxpemVkIiwibWFwYm94TGF5ZXJzIiwibWFwYm94TGF5ZXJzU2VsZWN0b3IiLCJPYmplY3QiLCJrZXlzIiwiaXNTdHlsZUxvYWRlZCIsIk1hcENvbXBvbmVudCIsIm1hcENvbnRyb2xzIiwiaXNFeHBvcnQiLCJsb2NhbGUiLCJlZGl0b3IiLCJsYXllcnNGb3JEZWNrU2VsZWN0b3IiLCJtYXBQcm9wcyIsInByZXNlcnZlRHJhd2luZ0J1ZmZlciIsIm9uVmlld3BvcnRDaGFuZ2UiLCJfb25WaWV3cG9ydENoYW5nZSIsInRyYW5zZm9ybVJlcXVlc3QiLCJpc0VkaXQiLCJtYXBEcmF3IiwiYWN0aXZlIiwiaGFzR2VvY29kZXJMYXllciIsImZpbmQiLCJsIiwiR0VPQ09ERVJfTEFZRVJfSUQiLCJpc1NwbGl0IiwiQm9vbGVhbiIsIkxPQ0FMRV9DT0RFUyIsImRyYWdSb3RhdGUiLCJyZWFkT25seSIsInNjYWxlIiwiZ2VvY29kZXIiLCJ0b2dnbGVQZXJzcGVjdGl2ZSIsInRvZ2dsZVNwbGl0TWFwIiwiX2hhbmRsZU1hcFRvZ2dsZUxheWVyIiwiX3RvZ2dsZU1hcENvbnRyb2wiLCJzZXRFZGl0b3JNb2RlIiwic2V0TG9jYWxlIiwidG9nZ2xlRWRpdG9yVmlzaWJpbGl0eSIsIl9zZXRNYXBib3hNYXAiLCJib3R0b21NYXBTdHlsZSIsIm9uTW91c2VNb3ZlIiwiX3JlbmRlckRlY2tPdmVybGF5IiwiX3JlbmRlck1hcGJveE92ZXJsYXlzIiwicG9seWdvbkZpbHRlcnMiLCJkZWxldGVGZWF0dXJlIiwic2V0U2VsZWN0ZWRGZWF0dXJlIiwic2V0RmVhdHVyZXMiLCJzZXRQb2x5Z29uRmlsdGVyTGF5ZXIiLCJ2aXNpYmxlIiwidG9wTWFwU3R5bGUiLCJfcmVuZGVyTWFwUG9wb3ZlciIsImdsb2JlIiwiX3JlbmRlck1hcCIsIkNvbXBvbmVudCIsIlByb3BUeXBlcyIsIm9iamVjdCIsImlzUmVxdWlyZWQiLCJzdHJpbmciLCJhcnJheU9mIiwiYW55IiwiYm9vbCIsIm9uTWFwVG9nZ2xlTGF5ZXIiLCJmdW5jIiwibnVtYmVyIiwiTWFwYm94R0xNYXAiLCJkaXNwbGF5TmFtZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBcUJBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUdBOztBQUNBOztBQUNBOztBQUVBOztBQUdBOztBQUNBOztBQUNBOztBQUNBOztBQVFBOztBQUNBOztBQU1BOztBQUNBOztBQUNBOzs7Ozs7Ozs7O0FBRUE7QUFDQSxJQUFNQSxTQUFTLEdBQUc7QUFDaEJDLEVBQUFBLFNBQVMsRUFBRTtBQUNUQyxJQUFBQSxPQUFPLEVBQUUsY0FEQTtBQUVUQyxJQUFBQSxRQUFRLEVBQUUsVUFGRDtBQUdUQyxJQUFBQSxLQUFLLEVBQUUsTUFIRTtBQUlUQyxJQUFBQSxNQUFNLEVBQUU7QUFKQyxHQURLO0FBT2hCQyxFQUFBQSxHQUFHLEVBQUU7QUFDSEgsSUFBQUEsUUFBUSxFQUFFLFVBRFA7QUFFSEcsSUFBQUEsR0FBRyxFQUFFLEtBRkY7QUFHSEMsSUFBQUEsYUFBYSxFQUFFLE1BSFo7QUFJSEgsSUFBQUEsS0FBSyxFQUFFLE1BSko7QUFLSEMsSUFB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