UNPKG

kepler.gl.geoiq

Version:

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

606 lines (540 loc) 74.6 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _typeof = require("@babel/runtime/helpers/typeof"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = exports.MapControl = void 0; 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 _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral")); var _react = _interopRequireWildcard(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _reselect = require("reselect"); var _styledComponents = _interopRequireDefault(require("styled-components")); var _reactGeosuggest = _interopRequireDefault(require("react-geosuggest")); var _styledComponents2 = require("../common/styled-components"); var _mapLayerSelector = _interopRequireDefault(require("../common/map-layer-selector")); var _logo = _interopRequireDefault(require("../common/logo")); var _mapLegend = _interopRequireDefault(require("./map-legend")); var _icons = require("../common/icons"); var _verticalToolbar = _interopRequireDefault(require("../common/vertical-toolbar")); var _toolbarItem = _interopRequireDefault(require("../common/toolbar-item")); var _defaultSettings = require("../../constants/default-settings"); var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8; function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } 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; } } // import './geo-suggest.css'; var StyledMapControl = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n right: 0;\n padding: ", "px;\n z-index: 1;\n top: ", "px;\n position: absolute;\n"])), function (props) { return props.theme.mapControl.padding; }, function (props) { return props.top; }); var StyledMapControlAction = _styledComponents["default"].div(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n padding: 4px 0;\n display: flex;\n justify-content: flex-end;\n"]))); var StyledMapControlButton = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n align-items: center;\n background-color: ", ";\n border-radius: 18px;\n border: 0;\n box-shadow: 0 6px 12px 0 rgba(0, 0, 0, 0.16);\n color: ", ";\n cursor: pointer;\n display: flex;\n height: 36px;\n justify-content: center;\n margin: 0;\n outline: none;\n padding: 0;\n transition: ", ";\n width: 36px;\n :focus {\n outline: none;\n }\n :hover {\n cursor: pointer;\n background-color: ", ";\n color: ", ";\n }\n"])), function (props) { return props.active ? props.theme.secondaryBtnActBgd : props.theme.secondaryBtnBgd; }, function (props) { return props.active ? props.theme.secondaryBtnActColor : props.theme.secondaryBtnColor; }, function (props) { return props.theme.transition; }, function (props) { return props.theme.secondaryBtnActBgd; }, function (props) { return props.theme.secondaryBtnActColor; }); var StyledMapControlPanel = _styledComponents["default"].div(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n background-color: ", ";\n flex-grow: 1;\n z-index: 1;\n p {\n margin-bottom: 0;\n }\n"])), function (props) { return props.theme.mapPanelBackgroundColor; }); var StyledMapControlPanelContent = _styledComponents["default"].div(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n ", " max-height: 500px;\n min-height: 100px;\n overflow: auto;\n"])), function (props) { return props.theme.dropdownScrollBar; }); var StyledMapSearchPanelContent = _styledComponents["default"].div(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2["default"])(["\n ", "\n"])), function (props) { return props.theme.dropdownScrollBar; }); var StyledMapControlPanelHeader = _styledComponents["default"].div(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n justify-content: space-between;\n background-color: ", ";\n height: 32px;\n padding: 6px 12px;\n font-size: 11px;\n color: ", ";\n button {\n width: 18px;\n height: 18px;\n }\n"])), function (props) { return props.theme.mapPanelHeaderBackgroundColor; }, function (props) { return props.theme.textColor; }); /** * Generates all layers available for the current map * TODO: this may be moved into map-container or map-control or even at the reducer level * @param layers * @param mapLayers * @returns {[id, label, isVisible]} */ var layerSelector = function layerSelector(layers, mapLayers) { var availableItems = Object.keys(layers).reduce(function (availableLayers, currentLayerId) { // is available ? if yes add to available list var currentLayer = layers[currentLayerId]; // if maplayers exists we need to make sure currentlayer // is contained in mapLayers in order to add onto availableLayers // otherwise we add all layers var layerConfig = mapLayers ? mapLayers[currentLayer.id] : currentLayer.config; var mustBeAdded = mapLayers && mapLayers[currentLayer.id] ? mapLayers[currentLayer.id].isAvailable : layerConfig.isVisible; return mustBeAdded ? [].concat((0, _toConsumableArray2["default"])(availableLayers), [{ id: currentLayer.id, name: currentLayer.config.label, isVisible: mapLayers && mapLayers[currentLayer.id] ? mapLayers[currentLayer.id].isVisible : layerConfig.isVisible, layer: currentLayer }]) : availableLayers; }, []); return availableItems; }; var MapControl = exports.MapControl = /*#__PURE__*/function (_Component) { (0, _inherits2["default"])(MapControl, _Component); var _super = _createSuper(MapControl); function MapControl() { var _this; (0, _classCallCheck2["default"])(this, MapControl); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _super.call.apply(_super, [this].concat(args)); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "layerSelector", function (state) { return state.layers; }); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "mapLayersSelector", function (state) { return state.mapLayers; }); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "layersToRenderSelector", function (props) { return props.layersToRender; }); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "layerPanelItemsSelector", (0, _reselect.createSelector)(_this.layerSelector, _this.layersToRenderSelector, function (layers, layersToRender) { return layers.filter(function (l) { return l.config.isVisible; }).map(function (layer) { return { id: layer.id, name: layer.config.label, // layer isVisible: layersToRender[layer.id] }; }); })); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "initialDataSelector", (0, _reselect.createSelector)(_this.layerSelector, _this.mapLayersSelector, layerSelector)); return _this; } (0, _createClass2["default"])(MapControl, [{ key: "render", value: function render() { var items = this.initialDataSelector(this.props); if (!items) { return null; } var _this$props = this.props, dragRotate = _this$props.dragRotate, layers = _this$props.layers, layersToRender = _this$props.layersToRender, isSplit = _this$props.isSplit, isExport = _this$props.isExport, mapIndex = _this$props.mapIndex, mapControls = _this$props.mapControls, onTogglePerspective = _this$props.onTogglePerspective, onToggleSplitMap = _this$props.onToggleSplitMap, onMapToggleLayer = _this$props.onMapToggleLayer, onToggleMapControl = _this$props.onToggleMapControl, editor = _this$props.editor, scale = _this$props.scale, readOnly = _this$props.readOnly, fitBounds = _this$props.fitBounds; var _mapControls$visibleL = mapControls.visibleLayers, visibleLayers = _mapControls$visibleL === void 0 ? {} : _mapControls$visibleL, _mapControls$mapLegen = mapControls.mapLegend, mapLegend = _mapControls$mapLegen === void 0 ? {} : _mapControls$mapLegen, _mapControls$toggle3d = mapControls.toggle3d, toggle3d = _mapControls$toggle3d === void 0 ? {} : _mapControls$toggle3d, _mapControls$splitMap = mapControls.splitMap, splitMap = _mapControls$splitMap === void 0 ? {} : _mapControls$splitMap, _mapControls$searchMa = mapControls.searchMap, searchMap = _mapControls$searchMa === void 0 ? {} : _mapControls$searchMa, _mapControls$mapDraw = mapControls.mapDraw, mapDraw = _mapControls$mapDraw === void 0 ? {} : _mapControls$mapDraw; return (/*#__PURE__*/_react["default"].createElement(StyledMapControl, { className: "map-control" }, splitMap.show ? /*#__PURE__*/_react["default"].createElement(ActionPanel, { key: 0 }, /*#__PURE__*/_react["default"].createElement(StyledMapControlButton, { active: isSplit, onClick: function onClick(e) { e.preventDefault(); onToggleSplitMap(isSplit ? mapIndex : undefined); }, key: "split-".concat(isSplit), className: "map-control-button split-map", "data-tip": true, "data-for": "action-toggle" }, isSplit ? /*#__PURE__*/_react["default"].createElement(_icons.Delete, { height: "18px" }) : /*#__PURE__*/_react["default"].createElement(_icons.Split, { height: "18px" }), /*#__PURE__*/_react["default"].createElement(MapLegendTooltip, { id: "action-toggle", message: isSplit ? 'Close current panel' : 'Switch to dual map view' }))) : null, isSplit && visibleLayers.show ? /*#__PURE__*/_react["default"].createElement(ActionPanel, { key: 1 }, /*#__PURE__*/_react["default"].createElement(LayerSelectorPanel, { items: this.layerPanelItemsSelector(this.props), onMapToggleLayer: onMapToggleLayer, isActive: visibleLayers.active, toggleMenuPanel: function toggleMenuPanel() { return onToggleMapControl('visibleLayers'); } })) : null, toggle3d.show ? /*#__PURE__*/_react["default"].createElement(ActionPanel, { key: 2 }, /*#__PURE__*/_react["default"].createElement(StyledMapControlButton, { onClick: function onClick(e) { e.preventDefault(); onTogglePerspective(); }, active: dragRotate, "data-tip": true, "data-for": "action-3d" }, /*#__PURE__*/_react["default"].createElement(_icons.Cube3d, { height: "22px" }), /*#__PURE__*/_react["default"].createElement(MapLegendTooltip, { id: "action-3d", message: dragRotate ? 'Disable 3D Map' : '3D Map' }))) : null, mapLegend.show ? /*#__PURE__*/_react["default"].createElement(ActionPanel, { key: 3 }, /*#__PURE__*/_react["default"].createElement(MapLegendPanel, { items: items, scale: scale, isExport: isExport, onMapToggleLayer: onMapToggleLayer, isActive: mapLegend.active, toggleMenuPanel: function toggleMenuPanel() { return onToggleMapControl('mapLegend'); } })) : null, searchMap.show ? /*#__PURE__*/_react["default"].createElement(ActionPanel, { key: 4 }, /*#__PURE__*/_react["default"].createElement(SearchMap, { isActive: searchMap.active, fitBounds: fitBounds, toggleMenuPanel: function toggleMenuPanel() { return onToggleMapControl('searchMap'); } })) : null, mapDraw.show ? /*#__PURE__*/_react["default"].createElement(ActionPanel, { key: 5 }, /*#__PURE__*/_react["default"].createElement(MapDrawPanel, { isActive: mapDraw.active && mapDraw.activeMapIndex === mapIndex, editor: editor, onToggleMenuPanel: function onToggleMenuPanel() { return onToggleMapControl('mapDraw'); }, onSetEditorMode: this.props.onSetEditorMode, onToggleEditorVisibility: this.props.onToggleEditorVisibility })) : null) ); } }]); return MapControl; }(_react.Component); (0, _defineProperty2["default"])(MapControl, "propTypes", { datasets: _propTypes["default"].object.isRequired, dragRotate: _propTypes["default"].bool.isRequired, isSplit: _propTypes["default"].bool.isRequired, layers: _propTypes["default"].arrayOf(_propTypes["default"].object), mapIndex: _propTypes["default"].number.isRequired, mapControls: _propTypes["default"].object.isRequired, onToggleFullScreen: _propTypes["default"].func.isRequired, onTogglePerspective: _propTypes["default"].func.isRequired, onToggleSplitMap: _propTypes["default"].func.isRequired, onToggleMapControl: _propTypes["default"].func.isRequired, onMapToggleLayer: _propTypes["default"].func.isRequired, onSetEditorMode: _propTypes["default"].func.isRequired, onToggleEditorVisibility: _propTypes["default"].func.isRequired, top: _propTypes["default"].number.isRequired, // optional scale: _propTypes["default"].number, mapLayers: _propTypes["default"].object }); (0, _defineProperty2["default"])(MapControl, "defaultProps", { isSplit: false, top: 0 }); var MapControlPanel = function MapControlPanel(_ref) { var children = _ref.children, header = _ref.header, onClick = _ref.onClick, _ref$scale = _ref.scale, scale = _ref$scale === void 0 ? 1 : _ref$scale, isExport = _ref.isExport; return (/*#__PURE__*/_react["default"].createElement(StyledMapControlPanel, { style: { transform: "scale(".concat(scale, ") translate(calc(-").concat(25 * (scale - 1), "% - ").concat(10 * scale, "px), calc(").concat(25 * (scale - 1), "% + ").concat(10 * scale, "px))") } }, /*#__PURE__*/_react["default"].createElement(StyledMapControlPanelHeader, { style: { position: 'relative' } }, isExport ? /*#__PURE__*/_react["default"].createElement(_logo["default"], { version: false, appName: "kepler.gl" }) : /*#__PURE__*/_react["default"].createElement("span", { style: { verticalAlign: 'middle' } }, header), isExport ? null : /*#__PURE__*/_react["default"].createElement(_styledComponents2.IconRoundSmall, null, /*#__PURE__*/_react["default"].createElement(_icons.Close, { height: "16px", onClick: onClick }))), /*#__PURE__*/_react["default"].createElement(StyledMapControlPanelContent, null, children)) ); }; var MapSearchPanel = function MapSearchPanel(_ref2) { var children = _ref2.children, header = _ref2.header, onClick = _ref2.onClick, _ref2$scale = _ref2.scale, scale = _ref2$scale === void 0 ? 1 : _ref2$scale, isExport = _ref2.isExport; return (/*#__PURE__*/_react["default"].createElement(StyledMapControlPanel, { style: { transform: "scale(".concat(scale, ") translate(calc(-").concat(25 * (scale - 1), "% - ").concat(10 * scale, "px), calc(").concat(25 * (scale - 1), "% + ").concat(10 * scale, "px))") } }, /*#__PURE__*/_react["default"].createElement(StyledMapControlPanelHeader, { style: { position: 'relative' } }, isExport ? /*#__PURE__*/_react["default"].createElement(_logo["default"], { version: false, appName: "kepler.gl" }) : /*#__PURE__*/_react["default"].createElement("span", { style: { verticalAlign: 'middle' } }, header), isExport ? null : /*#__PURE__*/_react["default"].createElement(_styledComponents2.IconRoundSmall, null, /*#__PURE__*/_react["default"].createElement(_icons.Close, { height: "16px", onClick: onClick }))), /*#__PURE__*/_react["default"].createElement(StyledMapSearchPanelContent, null, children)) ); }; var MapLegendPanel = function MapLegendPanel(_ref3) { var items = _ref3.items, isActive = _ref3.isActive, scale = _ref3.scale, toggleMenuPanel = _ref3.toggleMenuPanel, isExport = _ref3.isExport; return !isActive ? /*#__PURE__*/_react["default"].createElement(StyledMapControlButton, { key: 2, "data-tip": true, "data-for": "show-legend", className: "map-control-button show-legend", onClick: function onClick(e) { e.preventDefault(); toggleMenuPanel(); } }, /*#__PURE__*/_react["default"].createElement(_icons.Legend, { height: "22px" }), /*#__PURE__*/_react["default"].createElement(MapLegendTooltip, { id: "show-legend", message: 'show legend' })) : /*#__PURE__*/_react["default"].createElement(MapControlPanel, { scale: scale, header: 'Layer Legend', onClick: toggleMenuPanel, isExport: isExport }, /*#__PURE__*/_react["default"].createElement(_mapLegend["default"], { layers: items.filter(function (item) { return item.isVisible; }).map(function (item) { return item.layer; }) })); }; var SearchMap = function SearchMap(_ref4) { var isActive = _ref4.isActive, fitBounds = _ref4.fitBounds, toggleMenuPanel = _ref4.toggleMenuPanel; return !isActive ? /*#__PURE__*/_react["default"].createElement(StyledMapControlButton, { key: 4, "data-tip": true, "data-for": "show-search", className: "map-control-button show-search", onClick: function onClick(e) { e.preventDefault(); toggleMenuPanel(); } }, /*#__PURE__*/_react["default"].createElement(_icons.Search, { height: "22px" }), /*#__PURE__*/_react["default"].createElement(MapControlTooltip, { id: "map-search", message: "Search map" }), /*#__PURE__*/_react["default"].createElement(MapLegendTooltip, { id: "show-legend", message: 'show legend' })) : /*#__PURE__*/_react["default"].createElement(MapSearchPanel, { header: 'Search Map', onClick: toggleMenuPanel }, /*#__PURE__*/_react["default"].createElement(_reactGeosuggest["default"], { ignoreTab: true, style: { input: { height: 30, margin: 5 }, // suggest: {border: '1px solid green'}, suggestItem: { fontSize: 'x-small', margin: '10px 0px 0px 10px' } }, placeholder: 'Search map', minLength: 3, onSuggestSelect: function onSuggestSelect(suggest) { return _onSuggestSelect(suggest, fitBounds); } })); }; var StyledToolbar = (0, _styledComponents["default"])(_verticalToolbar["default"])(_templateObject8 || (_templateObject8 = (0, _taggedTemplateLiteral2["default"])(["\n position: absolute;\n right: 32px;\n"]))); var MapDrawPanel = _react["default"].memo(function (_ref5) { var editor = _ref5.editor, isActive = _ref5.isActive, onToggleMenuPanel = _ref5.onToggleMenuPanel, onSetEditorMode = _ref5.onSetEditorMode, onToggleEditorVisibility = _ref5.onToggleEditorVisibility; return (/*#__PURE__*/_react["default"].createElement("div", { className: "map-draw-controls", style: { position: 'relative' } }, isActive ? /*#__PURE__*/_react["default"].createElement(StyledToolbar, { show: isActive }, /*#__PURE__*/_react["default"].createElement(_toolbarItem["default"], { className: "edit-feature", onClick: function onClick() { return onSetEditorMode(_defaultSettings.EDITOR_MODES.EDIT); }, label: "select", iconHeight: "22px", icon: _icons.Search, active: editor.mode === _defaultSettings.EDITOR_MODES.EDIT }), /*#__PURE__*/_react["default"].createElement(_toolbarItem["default"], { className: "draw-feature", onClick: function onClick() { return onSetEditorMode(_defaultSettings.EDITOR_MODES.DRAW_POLYGON); }, label: "polygon", iconHeight: "22px", icon: _icons.Polygon, active: editor.mode === _defaultSettings.EDITOR_MODES.DRAW_POLYGON }), /*#__PURE__*/_react["default"].createElement(_toolbarItem["default"], { className: "draw-rectangle", onClick: function onClick() { return onSetEditorMode(_defaultSettings.EDITOR_MODES.DRAW_RECTANGLE); }, label: "rectangle", iconHeight: "22px", icon: _icons.Rectangle, active: editor.mode === _defaultSettings.EDITOR_MODES.DRAW_RECTANGLE }), /*#__PURE__*/_react["default"].createElement(_toolbarItem["default"], { className: "toggle-features", onClick: onToggleEditorVisibility, label: editor.visible ? 'hide' : 'show', iconHeight: "22px", icon: editor.visible ? _icons.EyeSeen : _icons.EyeUnseen })) : null, /*#__PURE__*/_react["default"].createElement(StyledMapControlButton, { onClick: function onClick(e) { e.preventDefault(); onToggleMenuPanel(); }, active: isActive, "data-tip": true, "data-for": "map-draw" }, /*#__PURE__*/_react["default"].createElement(_icons.DrawPolygon, { height: "22px" }), /*#__PURE__*/_react["default"].createElement(MapControlTooltip, { id: "map-draw", message: "Draw on map" }))) ); }); MapDrawPanel.displayName = 'x'; var _onSuggestSelect = function _onSuggestSelect(suggest, fitBounds) { // const minLat = suggest.gmaps.geometry.viewport.pa.g; // const minLng = suggest.gmaps.geometry.viewport.ka.g; // const maxLat = suggest.gmaps.geometry.viewport.pa.h; // const maxLng = suggest.gmaps.geometry.viewport.ka.h; // fitBounds([minLng, minLat, maxLng, maxLat]); if (!suggest) return []; var viewport = Object.keys(suggest.gmaps.geometry.viewport).reduce(function (accu, key) { accu.push(Object.keys(suggest.gmaps.geometry.viewport[key]).map(function (k) { return suggest.gmaps.geometry.viewport[key][k]; })); accu.flat(); return accu; }, []); viewport = viewport.flat(); // console.log('viewPort inside map-control'); // console.log('viewport after formating', [ // viewport[0], // viewport[2], // viewport[1], // viewport[3] // ]); fitBounds([viewport[2], viewport[0], viewport[3], viewport[1]]); }; var MapControlTooltip = _react["default"].memo(function (_ref6) { var id = _ref6.id, message = _ref6.message; return (/*#__PURE__*/_react["default"].createElement(_styledComponents2.Tooltip, { id: id, place: "left", effect: "solid" }, /*#__PURE__*/_react["default"].createElement("span", null, message)) ); }); MapControlTooltip.displayName = 'MapControlTooltip'; var LayerSelectorPanel = function LayerSelectorPanel(_ref7) { var items = _ref7.items, onMapToggleLayer = _ref7.onMapToggleLayer, isActive = _ref7.isActive, toggleMenuPanel = _ref7.toggleMenuPanel; return !isActive ? /*#__PURE__*/_react["default"].createElement(StyledMapControlButton, { key: 1, onClick: function onClick(e) { e.preventDefault(); toggleMenuPanel(); }, className: "map-control-button toggle-layer", "data-tip": true, "data-for": "toggle-layer" }, /*#__PURE__*/_react["default"].createElement(_icons.Layers, { height: "22px" }), /*#__PURE__*/_react["default"].createElement(MapLegendTooltip, { id: "toggle-layer", message: isActive ? 'Hide layer panel' : 'Show layer panel' })) : /*#__PURE__*/_react["default"].createElement(MapControlPanel, { header: "Visible layers", onClick: toggleMenuPanel }, /*#__PURE__*/_react["default"].createElement(_mapLayerSelector["default"], { layers: items, onMapToggleLayer: onMapToggleLayer })); }; var ActionPanel = function ActionPanel(_ref8) { var children = _ref8.children; return (/*#__PURE__*/_react["default"].createElement(StyledMapControlAction, null, children) ); }; var MapLegendTooltip = function MapLegendTooltip(_ref9) { var id = _ref9.id, message = _ref9.message; return (/*#__PURE__*/_react["default"].createElement(_styledComponents2.Tooltip, { id: id, place: "left", effect: "solid" }, /*#__PURE__*/_react["default"].createElement("span", null, message)) ); }; var MapControlFactory = function MapControlFactory() { return MapControl; }; var _default = exports["default"] = MapControlFactory; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL21hcC9tYXAtY29udHJvbC5qcyJdLCJuYW1lcyI6WyJTdHlsZWRNYXBDb250cm9sIiwic3R5bGVkIiwiZGl2IiwicHJvcHMiLCJ0aGVtZSIsIm1hcENvbnRyb2wiLCJwYWRkaW5nIiwidG9wIiwiU3R5bGVkTWFwQ29udHJvbEFjdGlvbiIsIlN0eWxlZE1hcENvbnRyb2xCdXR0b24iLCJhY3RpdmUiLCJzZWNvbmRhcnlCdG5BY3RCZ2QiLCJzZWNvbmRhcnlCdG5CZ2QiLCJzZWNvbmRhcnlCdG5BY3RDb2xvciIsInNlY29uZGFyeUJ0bkNvbG9yIiwidHJhbnNpdGlvbiIsIlN0eWxlZE1hcENvbnRyb2xQYW5lbCIsIm1hcFBhbmVsQmFja2dyb3VuZENvbG9yIiwiU3R5bGVkTWFwQ29udHJvbFBhbmVsQ29udGVudCIsImRyb3Bkb3duU2Nyb2xsQmFyIiwiU3R5bGVkTWFwU2VhcmNoUGFuZWxDb250ZW50IiwiU3R5bGVkTWFwQ29udHJvbFBhbmVsSGVhZGVyIiwibWFwUGFuZWxIZWFkZXJCYWNrZ3JvdW5kQ29sb3IiLCJ0ZXh0Q29sb3IiLCJsYXllclNlbGVjdG9yIiwibGF5ZXJzIiwibWFwTGF5ZXJzIiwiYXZhaWxhYmxlSXRlbXMiLCJPYmplY3QiLCJrZXlzIiwicmVkdWNlIiwiYXZhaWxhYmxlTGF5ZXJzIiwiY3VycmVudExheWVySWQiLCJjdXJyZW50TGF5ZXIiLCJsYXllckNvbmZpZyIsImlkIiwiY29uZmlnIiwibXVzdEJlQWRkZWQiLCJpc0F2YWlsYWJsZSIsImlzVmlzaWJsZSIsIm5hbWUiLCJsYWJlbCIsImxheWVyIiwiTWFwQ29udHJvbCIsInN0YXRlIiwibGF5ZXJzVG9SZW5kZXIiLCJsYXllcnNUb1JlbmRlclNlbGVjdG9yIiwiZmlsdGVyIiwibCIsIm1hcCIsIm1hcExheWVyc1NlbGVjdG9yIiwiaXRlbXMiLCJpbml0aWFsRGF0YVNlbGVjdG9yIiwiZHJhZ1JvdGF0ZSIsImlzU3BsaXQiLCJpc0V4cG9ydCIsIm1hcEluZGV4IiwibWFwQ29udHJvbHMiLCJvblRvZ2dsZVBlcnNwZWN0aXZlIiwib25Ub2dnbGVTcGxpdE1hcCIsIm9uTWFwVG9nZ2xlTGF5ZXIiLCJvblRvZ2dsZU1hcENvbnRyb2wiLCJlZGl0b3IiLCJzY2FsZSIsInJlYWRPbmx5IiwiZml0Qm91bmRzIiwidmlzaWJsZUxheWVycyIsIm1hcExlZ2VuZCIsInRvZ2dsZTNkIiwic3BsaXRNYXAiLCJzZWFyY2hNYXAiLCJtYXBEcmF3Iiwic2hvdyIsImUiLCJwcmV2ZW50RGVmYXVsdCIsInVuZGVmaW5lZCIsImxheWVyUGFuZWxJdGVtc1NlbGVjdG9yIiwiYWN0aXZlTWFwSW5kZXgiLCJvblNldEVkaXRvck1vZGUiLCJvblRvZ2dsZUVkaXRvclZpc2liaWxpdHkiLCJDb21wb25lbnQiLCJkYXRhc2V0cyIsIlByb3BUeXBlcyIsIm9iamVjdCIsImlzUmVxdWlyZWQiLCJib29sIiwiYXJyYXlPZiIsIm51bWJlciIsIm9uVG9nZ2xlRnVsbFNjcmVlbiIsImZ1bmMiLCJNYXBDb250cm9sUGFuZWwiLCJjaGlsZHJlbiIsImhlYWRlciIsIm9uQ2xpY2siLCJ0cmFuc2Zvcm0iLCJwb3NpdGlvbiIsInZlcnRpY2FsQWxpZ24iLCJNYXBTZWFyY2hQYW5lbCIsIk1hcExlZ2VuZFBhbmVsIiwiaXNBY3RpdmUiLCJ0b2dnbGVNZW51UGFuZWwiLCJpdGVtIiwiU2VhcmNoTWFwIiwiaW5wdXQiLCJoZWlnaHQiLCJtYXJnaW4iLCJzdWdnZXN0SXRlbSIsImZvbnRTaXplIiwic3VnZ2VzdCIsIm9uU3VnZ2VzdFNlbGVjdCIsIlN0eWxlZFRvb2xiYXIiLCJWZXJ0aWNhbFRvb2xiYXIiLCJNYXBEcmF3UGFuZWwiLCJSZWFjdCIsIm1lbW8iLCJvblRvZ2dsZU1lbnVQYW5lbCIsIkVESVRPUl9NT0RFUyIsIkVESVQiLCJTZWFyY2giLCJtb2RlIiwiRFJBV19QT0xZR09OIiwiUG9seWdvbiIsIkRSQVdfUkVDVEFOR0xFIiwiUmVjdGFuZ2xlIiwidmlzaWJsZSIsIkV5ZVNlZW4iLCJFeWVVbnNlZW4iLCJkaXNwbGF5TmFtZSIsInZpZXdwb3J0IiwiZ21hcHMiLCJnZW9tZXRyeSIsImFjY3UiLCJrZXkiLCJwdXNoIiwiayIsImZsYXQiLCJNYXBDb250cm9sVG9vbHRpcCIsIm1lc3NhZ2UiLCJMYXllclNlbGVjdG9yUGFuZWwiLCJBY3Rpb25QYW5lbCIsIk1hcExlZ2VuZFRvb2x0aXAiLCJNYXBDb250cm9sRmFjdG9yeSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvQkE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBS0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBZ0JBOztBQUNBOztBQUNBOzs7Ozs7Ozs7Ozs7QUFDQTtBQUVBLElBQU1BLGdCQUFnQixHQUFHQyw2QkFBT0MsR0FBVixnTEFFVCxVQUFBQyxLQUFLO0FBQUEsU0FBSUEsS0FBSyxDQUFDQyxLQUFOLENBQVlDLFVBQVosQ0FBdUJDLE9BQTNCO0FBQUEsQ0FGSSxFQUliLFVBQUFILEtBQUs7QUFBQSxTQUFJQSxLQUFLLENBQUNJLEdBQVY7QUFBQSxDQUpRLENBQXRCOztBQVFBLElBQU1DLHNCQUFzQixHQUFHUCw2QkFBT0MsR0FBViw2SkFBNUI7O0FBTUEsSUFBTU8sc0JBQXNCLEdBQUdSLDZCQUFPQyxHQUFWLHVoQkFFTixVQUFBQyxLQUFLO0FBQUEsU0FDdkJBLEtBQUssQ0FBQ08sTUFBTixHQUNJUCxLQUFLLENBQUNDLEtBQU4sQ0FBWU8sa0JBRGhCLEdBRUlSLEtBQUssQ0FBQ0MsS0FBTixDQUFZUSxlQUhPO0FBQUEsQ0FGQyxFQVNqQixVQUFBVCxLQUFLO0FBQUEsU0FDWkEsS0FBSyxDQUFDTyxNQUFOLEdBQ0lQLEtBQUssQ0FBQ0MsS0FBTixDQUFZUyxvQkFEaEIsR0FFSVYsS0FBSyxDQUFDQyxLQUFOLENBQVlVLGlCQUhKO0FBQUEsQ0FUWSxFQW9CWixVQUFBWCxLQUFLO0FBQUEsU0FBSUEsS0FBSyxDQUFDQyxLQUFOLENBQVlXLFVBQWhCO0FBQUEsQ0FwQk8s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QUFTLE1BQUEsRUFBRSxFQUFFdEcsRUFBYjtBQUFpQixNQUFBLEtBQUssRUFBQyxNQUF2QjtBQUE4QixNQUFBLE1BQU0sRUFBQztBQUFyQyxvQkFDRSw4Q0FBT3NHLE9BQVAsQ0FERjtBQUR1QjtBQUFBLENBQXpCOztBQU1BLElBQU1JLGlCQUFpQixHQUFHLFNBQXBCQSxpQkFBb0I7QUFBQSxTQUFNbEcsVUFBTjtBQUFBLENBQTFCOztvQ0FFZWtHLGlCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDIzIFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc