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
JavaScript
"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