UNPKG

kepler.gl.geoiq

Version:

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

121 lines (103 loc) 14.5 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = MapTooltipContainer; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _react = _interopRequireDefault(require("react")); var _mapPopover = _interopRequireDefault(require("./map-popover")); var _viewportMercatorProject = _interopRequireDefault(require("viewport-mercator-project")); // Copyright (c) 2023 Uber Technologies, Inc. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. MapTooltipContainer.deps = [_mapPopover["default"]]; var getHoverXY = function getHoverXY(viewport, lngLat) { var screenCoord = !viewport || !lngLat ? null : viewport.project(lngLat); return screenCoord && { x: screenCoord[0], y: screenCoord[1] }; }; function MapTooltipContainer(MapPopover) { /* eslint-disable complexity */ var MapTooltip = _react["default"].memo(function (_ref) { var mapState = _ref.mapState, hoverInfo = _ref.hoverInfo, clicked = _ref.clicked, datasets = _ref.datasets, interactionConfig = _ref.interactionConfig, layers = _ref.layers, mapLayers = _ref.mapLayers, _ref$mousePos = _ref.mousePos, mousePosition = _ref$mousePos.mousePosition, coordinate = _ref$mousePos.coordinate, pinned = _ref$mousePos.pinned, onClose = _ref.onClose; if (!mousePosition) { return null; } // if clicked something, ignore hover behavior var objectInfo = clicked || hoverInfo; var layerHoverProp = null; var position = { x: mousePosition[0], y: mousePosition[1] }; if (interactionConfig.tooltip.enabled && objectInfo && objectInfo.picked) { // if anything hovered var object = objectInfo.object, overlay = objectInfo.layer; // deckgl layer to kepler-gl layer var layer = layers[overlay.props.idx]; if (layer.config.isVisible && layer.getHoverData && (!mapLayers || mapLayers[layer.id].isVisible)) { // if layer is visible and have hovered data var dataId = layer.config.dataId; var _datasets$dataId2 = datasets[dataId], allData = _datasets$dataId2.allData, fields = _datasets$dataId2.fields; var data = layer.getHoverData(object, allData); var fieldsToShow = interactionConfig.tooltip.config.fieldsToShow[dataId]; layerHoverProp = { data: data, fields: fields, fieldsToShow: fieldsToShow, layer: layer }; } } 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; position = getHoverXY(viewport, lngLat); } return (/*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(MapPopover, (0, _extends2["default"])({}, position, { layerHoverProp: layerHoverProp, coordinate: interactionConfig.coordinate.enabled && ((pinned || {}).coordinate || coordinate), freezed: Boolean(clicked || pinned), onClose: onClose, mapW: mapState.width, mapH: mapState.height }))) ); }); MapTooltip.displayName = 'MapTooltip'; return MapTooltip; } /* eslint-enable complexity */ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL21hcC9tYXAtdG9vbHRpcC5qcyJdLCJuYW1lcyI6WyJNYXBUb29sdGlwQ29udGFpbmVyIiwiZGVwcyIsIk1hcFBvcG92ZXJGYWN0b3J5IiwiZ2V0SG92ZXJYWSIsInZpZXdwb3J0IiwibG5nTGF0Iiwic2NyZWVuQ29vcmQiLCJwcm9qZWN0IiwieCIsInkiLCJNYXBQb3BvdmVyIiwiTWFwVG9vbHRpcCIsIlJlYWN0IiwibWVtbyIsIm1hcFN0YXRlIiwiaG92ZXJJbmZvIiwiY2xpY2tlZCIsImRhdGFzZXRzIiwiaW50ZXJhY3Rpb25Db25maWciLCJsYXllcnMiLCJtYXBMYXllcnMiLCJtb3VzZVBvcyIsIm1vdXNlUG9zaXRpb24iLCJjb29yZGluYXRlIiwicGlubmVkIiwib25DbG9zZSIsIm9iamVjdEluZm8iLCJsYXllckhvdmVyUHJvcCIsInBvc2l0aW9uIiwidG9vbHRpcCIsImVuYWJsZWQiLCJwaWNrZWQiLCJvYmplY3QiLCJvdmVybGF5IiwibGF5ZXIiLCJwcm9wcyIsImlkeCIsImNvbmZpZyIsImlzVmlzaWJsZSIsImdldEhvdmVyRGF0YSIsImlkIiwiZGF0YUlkIiwiYWxsRGF0YSIsImZpZWxkcyIsImRhdGEiLCJmaWVsZHNUb1Nob3ciLCJXZWJNZXJjYXRvclZpZXdwb3J0IiwiQm9vbGVhbiIsIndpZHRoIiwiaGVpZ2h0IiwiZGlzcGxheU5hbWUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBb0JBOztBQUNBOztBQUNBOztBQXRCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU1BQSxtQkFBbUIsQ0FBQ0MsSUFBcEIsR0FBMkIsQ0FBQ0Msc0JBQUQsQ0FBM0I7O0FBRUEsSUFBTUMsVUFBVSxHQUFHLFNBQWJBLFVBQWEsQ0FBQ0MsUUFBRCxFQUFXQyxNQUFYLEVBQXNCO0FBQ3ZDLE1B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QUFKLENBQXdCaEMsUUFBeEIsQ0FBakI7QUFDQSxVQUFNVCxNQUFNLEdBQUdXLE9BQU8sR0FBR0EsT0FBTyxDQUFDWCxNQUFYLEdBQW9CbUIsTUFBTSxDQUFDRCxVQUFqRDtBQUNBSyxNQUFBQSxRQUFRLEdBQUd6QixVQUFVLENBQUNDLFFBQUQsRUFBV0MsTUFBWCxDQUFyQjtBQUNEOztBQUVELHlCQUNFLDBEQUNFLGdDQUFDLFVBQUQsZ0NBQ011QixRQUROO0FBRUUsUUFBQSxjQUFjLEVBQUVELGNBRmxCO0FBR0UsUUFBQSxVQUFVLEVBQUVULGlCQUFpQixDQUFDSyxVQUFsQixDQUE2Qk8sT0FBN0IsS0FBeUMsQ0FBQ04sTUFBTSxJQUFJLEVBQVgsRUFBZUQsVUFBZixJQUE2QkEsVUFBdEUsQ0FIZDtBQUlFLFFBQUEsT0FBTyxFQUFFd0IsT0FBTyxDQUFDL0IsT0FBTyxJQUFJUSxNQUFaLENBSmxCO0FBS0UsUUFBQSxPQUFPLEVBQUVDLE9BTFg7QUFNRSxRQUFBLElBQUksRUFBRVgsUUFBUSxDQUFDa0MsS0FOakI7QUFPRSxRQUFBLElBQUksRUFBRWxDLFFBQVEsQ0FBQ21DO0FBUGpCLFNBREY7QUFERjtBQWFELEdBeEVrQixDQUFuQjs7QUEwRUF0QyxFQUFBQSxVQUFVLENBQUN1QyxXQUFYLEdBQXlCLFlBQXpCO0FBRUEsU0FBT3ZDLFVBQVA7QUFDRDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDIzIFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBNYXBQb3BvdmVyRmFjdG9yeSBmcm9tICdjb21wb25lbnRzL21hcC9tYXAtcG9wb3Zlcic7XG5pbXBvcnQgV2ViTWVyY2F0b3JWaWV3cG9ydCBmcm9tICd2aWV3cG9ydC1tZXJjYXRvci1wcm9qZWN0JztcblxuTWFwVG9vbHRpcENvbnRhaW5lci5kZXBzID0gW01hcFBvcG92ZXJGYWN0b3J5XTtcblxuY29uc3QgZ2V0SG92ZXJYWSA9ICh2aWV3cG9ydCwgbG5nTGF0KSA9PiB7XG4gIGNvbnN0IHNjcmVlbkNvb3JkID0gIXZpZXdwb3J0IHx8ICFsbmdMYXQgPyBudWxsIDogdmlld3BvcnQucHJvamVjdChsbmdMYXQpO1xuICByZXR1cm4gc2NyZWVuQ29vcmQgJiYge3g6IHNjcmVlbkNvb3JkWzBdLCB5OiBzY3JlZW5Db29yZFsxXX07XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBNYXBUb29sdGlwQ29udGFpbmVyKE1hcFBvcG92ZXIpIHtcbiAgLyogZXNsaW50LWRpc2FibGUgY29tcGxleGl0eSAqL1xuICBjb25zdCBNYXBUb29sdGlwID0gUmVhY3QubWVtbygoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBTdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG92ZXJJbmZvLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGlja2VkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhc2V0cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVycyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwTGF5ZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3VzZVBvczoge21vdXNlUG9zaXRpb24sIGNvb3JkaW5hdGUsIHBpbm5lZH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xvc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pID0+IHtcbiAgICBpZiAoIW1vdXNlUG9zaXRpb24pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIGlmIGNsaWNrZWQgc29tZXRoaW5nLCBpZ25vcmUgaG92ZXIgYmVoYXZpb3JcbiAgICBjb25zdCBvYmplY3RJbmZvID0gY2xpY2tlZCB8fCBob3ZlckluZm87XG4gICAgbGV0IGxheWVySG92ZXJQcm9wID0gbnVsbDtcbiAgICBsZXQgcG9zaXRpb24gPSB7eDogbW91c2VQb3NpdGlvblswXSwgeTogbW91c2VQb3NpdGlvblsxXX07XG5cbiAgICBpZiAoXG4gICAgICBpbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwLmVuYWJsZWQgJiZcbiAgICAgIG9iamVjdEluZm8gJiZcbiAgICAgIG9iamVjdEluZm8ucGlja2VkXG4gICAgKSB7XG4gICAgICAvLyBpZiBhbnl0aGluZyBob3ZlcmVkXG4gICAgICBjb25zdCB7b2JqZWN0LCBsYXllcjogb3ZlcmxheX0gPSBvYmplY3RJbmZvO1xuXG4gICAgICAvLyBkZWNrZ2wgbGF5ZXIgdG8ga2VwbGVyLWdsIGxheWVyXG4gICAgICBjb25zdCBsYXllciA9IGxheWVyc1tvdmVybGF5LnByb3BzLmlkeF07XG5cbiAgICAgIGlmIChcbiAgICAgICAgbGF5ZXIuY29uZmlnLmlzVmlzaWJsZSAmJlxuICAgICAgICBsYXllci5nZXRIb3ZlckRhdGEgJiZcbiAgICAgICAgKCFtYXBMYXllcnMgfHwgbWFwTGF5ZXJzW2xheWVyLmlkXS5pc1Zpc2libGUpXG4gICAgICApIHtcblxuICAgICAgICAvLyBpZiBsYXllciBpcyB2aXNpYmxlIGFuZCBoYXZlIGhvdmVyZWQgZGF0YVxuICAgICAgICBjb25zdCB7Y29uZmlnOiB7ZGF0YUlkfX0gPSBsYXllcjtcbiAgICAgICAgY29uc3Qge2FsbERhdGEsIGZpZWxkc30gPSBkYXRhc2V0c1tkYXRhSWRdO1xuICAgICAgICBjb25zdCBkYXRhID0gbGF5ZXIuZ2V0SG92ZXJEYXRhKG9iamVjdCwgYWxsRGF0YSk7XG4gICAgICAgIGNvbnN0IGZpZWxkc1RvU2hvdyA9IGludGVyYWN0aW9uQ29uZmlnLnRvb2x0aXAuY29uZmlnLmZpZWxkc1RvU2hvd1tkYXRhSWRdO1xuXG4gICAgICAgIGxheWVySG92ZXJQcm9wID0ge1xuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgZmllbGRzLFxuICAgICAgICAgIGZpZWxkc1RvU2hvdyxcbiAgICAgICAgICBsYXllclxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHBpbm5lZCB8fCBjbGlja2VkKSB7XG4gICAgICAvLyBwcm9qZWN0IGxuZ2xhdCB0byBzY3JlZW4gc28gdGhhdCB0b29sdGlwIGZvbGxvd3MgdGhlIG9iamVjdCBvbiB6b29tXG4gICAgICBjb25zdCB2aWV3cG9ydCA9IG5ldyBXZWJNZXJjYXRvclZpZXdwb3J0KG1hcFN0YXRlKTtcbiAgICAgIGNvbnN0IGxuZ0xhdCA9IGNsaWNrZWQgPyBjbGlja2VkLmxuZ0xhdCA6IHBpbm5lZC5jb29yZGluYXRlO1xuICAgICAgcG9zaXRpb24gPSBnZXRIb3ZlclhZKHZpZXdwb3J0LCBsbmdMYXQpO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2PlxuICAgICAgICA8TWFwUG9wb3ZlclxuICAgICAgICAgIHsuLi5wb3NpdGlvbn1cbiAgICAgICAgICBsYXllckhvdmVyUHJvcD17bGF5ZXJIb3ZlclByb3B9XG4gICAgICAgICAgY29vcmRpbmF0ZT17aW50ZXJhY3Rpb25Db25maWcuY29vcmRpbmF0ZS5lbmFibGVkICYmICgocGlubmVkIHx8IHt9KS5jb29yZGluYXRlIHx8IGNvb3JkaW5hdGUpfVxuICAgICAgICAgIGZyZWV6ZWQ9e0Jvb2xlYW4oY2xpY2tlZCB8fCBwaW5uZWQpfVxuICAgICAgICAgIG9uQ2xvc2U9e29uQ2xvc2V9XG4gICAgICAgICAgbWFwVz17bWFwU3RhdGUud2lkdGh9XG4gICAgICAgICAgbWFwSD17bWFwU3RhdGUuaGVpZ2h0fVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfSk7XG5cbiAgTWFwVG9vbHRpcC5kaXNwbGF5TmFtZSA9ICdNYXBUb29sdGlwJztcblxuICByZXR1cm4gTWFwVG9vbHRpcDtcbn1cbi8qIGVzbGludC1lbmFibGUgY29tcGxleGl0eSAqL1xuIl19