kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
99 lines (93 loc) • 14.6 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof = require("@babel/runtime/helpers/typeof");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.MapViewStateContextProvider = exports.MapViewStateContext = void 0;
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _react = _interopRequireWildcard(require("react"));
var _lodash = _interopRequireDefault(require("lodash.isequal"));
var _lodash2 = _interopRequireDefault(require("lodash.pick"));
var _reducers = require("@kepler.gl/reducers");
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
// SPDX-License-Identifier: MIT
// Copyright contributors to the kepler.gl project
var MapViewStateContext = exports.MapViewStateContext = /*#__PURE__*/(0, _react.createContext)({
getInternalViewState: function getInternalViewState() {
return {
latitude: 0,
longitude: 0,
zoom: 0
};
},
setInternalViewState: function setInternalViewState() {
return;
}
});
/**
* This context provider is used to localize the map view state so
* that changes to the map view state do not affect the rest of the app,
* mainly to prevent issues we experienced with basemap/deck viewport syncing.
*/
var MapViewStateContextProvider = exports.MapViewStateContextProvider = function MapViewStateContextProvider(_ref) {
var mapState = _ref.mapState,
children = _ref.children;
var _ref2 = mapState || {},
isSplit = _ref2.isSplit,
isViewportSynced = _ref2.isViewportSynced;
// Store locally map view states by mapIndex
var _useState = (0, _react.useState)([mapState]),
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
viewStates = _useState2[0],
setViewStates = _useState2[1];
// Detect and apply outside viewport changes
// (e.g. from geocoder or when switching to 3d mode)
(0, _react.useEffect)(function () {
if (!mapState) return;
var primaryState = viewStates[0];
if (primaryState === mapState) return;
var props = Object.keys(primaryState).filter(function (key) {
return !key.startsWith('transition');
});
var hasChanged = function hasChanged(a, b) {
return !(0, _lodash["default"])((0, _lodash2["default"])(a, props), (0, _lodash2["default"])(b, props));
};
if (isSplit && !isViewportSynced) {
var _mapState$splitMapVie;
if ((_mapState$splitMapVie = mapState.splitMapViewports) !== null && _mapState$splitMapVie !== void 0 && _mapState$splitMapVie.some(function (s, i) {
return hasChanged(s, viewStates[i]);
})) {
setViewStates(mapState.splitMapViewports);
}
} else if (hasChanged(primaryState, mapState)) {
setViewStates([(0, _reducers.pickViewportPropsFromMapState)(mapState)]);
}
// Only update internalViewState when viewState changes
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [mapState]);
var value = {
getInternalViewState: function getInternalViewState() {
var _viewStates$index;
var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
return (_viewStates$index = viewStates[index]) !== null && _viewStates$index !== void 0 ? _viewStates$index : viewStates[0];
},
setInternalViewState: function setInternalViewState(newViewState) {
var index = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
setViewStates(function (prevViewStates) {
if (isSplit && !isViewportSynced) {
var nextViewStates = (0, _toConsumableArray2["default"])(prevViewStates);
nextViewStates[index] = newViewState;
return nextViewStates;
}
return [newViewState];
});
}
};
return /*#__PURE__*/_react["default"].createElement(MapViewStateContext.Provider, {
value: value
}, children);
};
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9sb2Rhc2gyIiwiX3JlZHVjZXJzIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiTWFwVmlld1N0YXRlQ29udGV4dCIsImV4cG9ydHMiLCJjcmVhdGVDb250ZXh0IiwiZ2V0SW50ZXJuYWxWaWV3U3RhdGUiLCJsYXRpdHVkZSIsImxvbmdpdHVkZSIsInpvb20iLCJzZXRJbnRlcm5hbFZpZXdTdGF0ZSIsIk1hcFZpZXdTdGF0ZUNvbnRleHRQcm92aWRlciIsIl9yZWYiLCJtYXBTdGF0ZSIsImNoaWxkcmVuIiwiX3JlZjIiLCJpc1NwbGl0IiwiaXNWaWV3cG9ydFN5bmNlZCIsIl91c2VTdGF0ZSIsInVzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5MiIsInZpZXdTdGF0ZXMiLCJzZXRWaWV3U3RhdGVzIiwidXNlRWZmZWN0IiwicHJpbWFyeVN0YXRlIiwicHJvcHMiLCJrZXlzIiwiZmlsdGVyIiwia2V5Iiwic3RhcnRzV2l0aCIsImhhc0NoYW5nZWQiLCJiIiwiaXNFcXVhbCIsInBpY2siLCJfbWFwU3RhdGUkc3BsaXRNYXBWaWUiLCJzcGxpdE1hcFZpZXdwb3J0cyIsInNvbWUiLCJzIiwicGlja1ZpZXdwb3J0UHJvcHNGcm9tTWFwU3RhdGUiLCJ2YWx1ZSIsIl92aWV3U3RhdGVzJGluZGV4IiwiaW5kZXgiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJuZXdWaWV3U3RhdGUiLCJwcmV2Vmlld1N0YXRlcyIsIm5leHRWaWV3U3RhdGVzIiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsImNyZWF0ZUVsZW1lbnQiLCJQcm92aWRlciJdLCJzb3VyY2VzIjpbIi4uL3NyYy9tYXAtdmlldy1zdGF0ZS1jb250ZXh0LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgUmVhY3QsIHt1c2VTdGF0ZSwgdXNlRWZmZWN0LCBjcmVhdGVDb250ZXh0fSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgaXNFcXVhbCBmcm9tICdsb2Rhc2guaXNlcXVhbCc7XG5pbXBvcnQgcGljayBmcm9tICdsb2Rhc2gucGljayc7XG5pbXBvcnQge01hcFZpZXdTdGF0ZX0gZnJvbSAnQGRlY2suZ2wvY29yZS90eXBlZCc7XG5pbXBvcnQge3BpY2tWaWV3cG9ydFByb3BzRnJvbU1hcFN0YXRlfSBmcm9tICdAa2VwbGVyLmdsL3JlZHVjZXJzJztcblxuaW1wb3J0IHtNYXBTdGF0ZX0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5cbmV4cG9ydCB0eXBlIE1hcFZpZXdTdGF0ZUNvbnRleHRUeXBlID0ge1xuICBnZXRJbnRlcm5hbFZpZXdTdGF0ZTogKGluZGV4PzogbnVtYmVyKSA9PiBNYXBWaWV3U3RhdGU7XG4gIHNldEludGVybmFsVmlld1N0YXRlOiAodmlld1N0YXRlPzogTWFwVmlld1N0YXRlLCBpbmRleD86IG51bWJlcikgPT4gdm9pZDtcbn07XG5cbmV4cG9ydCBjb25zdCBNYXBWaWV3U3RhdGVDb250ZXh0OiBSZWFjdC5Db250ZXh0PE1hcFZpZXdTdGF0ZUNvbnRleHRUeXBlPiA9IGNyZWF0ZUNvbnRleHQoe1xuICBnZXRJbnRlcm5hbFZpZXdTdGF0ZTogKCkgPT4gKHtsYXRpdHVkZTogMCwgbG9uZ2l0dWRlOiAwLCB6b29tOiAwfSksXG4gIHNldEludGVybmFsVmlld1N0YXRlOiAoKSA9PiB7XG4gICAgcmV0dXJuO1xuICB9XG59KTtcblxuLyoqXG4gKiBUaGlzIGNvbnRleHQgcHJvdmlkZXIgaXMgdXNlZCB0byBsb2NhbGl6ZSB0aGUgbWFwIHZpZXcgc3RhdGUgc29cbiAqIHRoYXQgY2hhbmdlcyB0byB0aGUgbWFwIHZpZXcgc3RhdGUgZG8gbm90IGFmZmVjdCB0aGUgcmVzdCBvZiB0aGUgYXBwLFxuICogbWFpbmx5IHRvIHByZXZlbnQgaXNzdWVzIHdlIGV4cGVyaWVuY2VkIHdpdGggYmFzZW1hcC9kZWNrIHZpZXdwb3J0IHN5bmNpbmcuXG4gKi9cblxuZXhwb3J0IGNvbnN0IE1hcFZpZXdTdGF0ZUNvbnRleHRQcm92aWRlciA9ICh7XG4gIG1hcFN0YXRlLFxuICBjaGlsZHJlblxufToge1xuICBtYXBTdGF0ZTogTWFwU3RhdGU7XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XG59KSA9PiB7XG4gIGNvbnN0IHtpc1NwbGl0LCBpc1ZpZXdwb3J0U3luY2VkfSA9IG1hcFN0YXRlIHx8IHt9O1xuXG4gIC8vIFN0b3JlIGxvY2FsbHkgbWFwIHZpZXcgc3RhdGVzIGJ5IG1hcEluZGV4XG4gIGNvbnN0IFt2aWV3U3RhdGVzLCBzZXRWaWV3U3RhdGVzXSA9IHVzZVN0YXRlKFttYXBTdGF0ZV0pO1xuXG4gIC8vIERldGVjdCBhbmQgYXBwbHkgb3V0c2lkZSB2aWV3cG9ydCBjaGFuZ2VzXG4gIC8vIChlLmcuIGZyb20gZ2VvY29kZXIgb3Igd2hlbiBzd2l0Y2hpbmcgdG8gM2QgbW9kZSlcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIW1hcFN0YXRlKSByZXR1cm47XG4gICAgY29uc3QgcHJpbWFyeVN0YXRlID0gdmlld1N0YXRlc1swXTtcbiAgICBpZiAocHJpbWFyeVN0YXRlID09PSBtYXBTdGF0ZSkgcmV0dXJuO1xuICAgIGNvbnN0IHByb3BzID0gT2JqZWN0LmtleXMocHJpbWFyeVN0YXRlKS5maWx0ZXIoa2V5ID0+ICFrZXkuc3RhcnRzV2l0aCgndHJhbnNpdGlvbicpKTtcbiAgICBjb25zdCBoYXNDaGFuZ2VkID0gKGEsIGIpID0+ICFpc0VxdWFsKHBpY2soYSwgcHJvcHMpLCBwaWNrKGIsIHByb3BzKSk7XG4gICAgaWYgKGlzU3BsaXQgJiYgIWlzVmlld3BvcnRTeW5jZWQpIHtcbiAgICAgIGlmIChtYXBTdGF0ZS5zcGxpdE1hcFZpZXdwb3J0cz8uc29tZSgocywgaSkgPT4gaGFzQ2hhbmdlZChzLCB2aWV3U3RhdGVzW2ldKSkpIHtcbiAgICAgICAgc2V0Vmlld1N0YXRlcyhtYXBTdGF0ZS5zcGxpdE1hcFZpZXdwb3J0cyBhcyBNYXBTdGF0ZVtdKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGhhc0NoYW5nZWQocHJpbWFyeVN0YXRlLCBtYXBTdGF0ZSkpIHtcbiAgICAgIHNldFZpZXdTdGF0ZXMoW3BpY2tWaWV3cG9ydFByb3BzRnJvbU1hcFN0YXRlKG1hcFN0YXRlKV0gYXMgTWFwU3RhdGVbXSk7XG4gICAgfVxuICAgIC8vIE9ubHkgdXBkYXRlIGludGVybmFsVmlld1N0YXRlIHdoZW4gdmlld1N0YXRlIGNoYW5nZXNcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIH0sIFttYXBTdGF0ZV0pO1xuXG4gIGNvbnN0IHZhbHVlID0ge1xuICAgIGdldEludGVybmFsVmlld1N0YXRlOiAoaW5kZXggPSAwKSA9PiB2aWV3U3RhdGVzW2luZGV4XSA/PyB2aWV3U3RhdGVzWzBdLFxuICAgIHNldEludGVybmFsVmlld1N0YXRlOiAobmV3Vmlld1N0YXRlLCBpbmRleCA9IDApID0+IHtcbiAgICAgIHNldFZpZXdTdGF0ZXMocHJldlZpZXdTdGF0ZXMgPT4ge1xuICAgICAgICBpZiAoaXNTcGxpdCAmJiAhaXNWaWV3cG9ydFN5bmNlZCkge1xuICAgICAgICAgIGNvbnN0IG5leHRWaWV3U3RhdGVzID0gWy4uLnByZXZWaWV3U3RhdGVzXTtcbiAgICAgICAgICBuZXh0Vmlld1N0YXRlc1tpbmRleF0gPSBuZXdWaWV3U3RhdGUgYXMgTWFwU3RhdGU7XG4gICAgICAgICAgcmV0dXJuIG5leHRWaWV3U3RhdGVzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbbmV3Vmlld1N0YXRlXSBhcyBNYXBTdGF0ZVtdO1xuICAgICAgfSk7XG4gICAgfVxuICB9IGFzIE1hcFZpZXdTdGF0ZUNvbnRleHRUeXBlO1xuICByZXR1cm4gPE1hcFZpZXdTdGF0ZUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3ZhbHVlfT57Y2hpbGRyZW59PC9NYXBWaWV3U3RhdGVDb250ZXh0LlByb3ZpZGVyPjtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxNQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxRQUFBLEdBQUFELHNCQUFBLENBQUFGLE9BQUE7QUFFQSxJQUFBSSxTQUFBLEdBQUFKLE9BQUE7QUFBa0UsU0FBQUsseUJBQUFDLENBQUEsNkJBQUFDLE9BQUEsbUJBQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQUYsd0JBQUEsWUFBQUEseUJBQUFDLENBQUEsV0FBQUEsQ0FBQSxHQUFBRyxDQUFBLEdBQUFELENBQUEsS0FBQUYsQ0FBQTtBQUFBLFNBQUFQLHdCQUFBTyxDQUFBLEVBQUFFLENBQUEsU0FBQUEsQ0FBQSxJQUFBRixDQUFBLElBQUFBLENBQUEsQ0FBQUksVUFBQSxTQUFBSixDQUFBLGVBQUFBLENBQUEsZ0JBQUFLLE9BQUEsQ0FBQUwsQ0FBQSwwQkFBQUEsQ0FBQSxzQkFBQUEsQ0FBQSxRQUFBRyxDQUFBLEdBQUFKLHdCQUFBLENBQUFHLENBQUEsT0FBQUMsQ0FBQSxJQUFBQSxDQUFBLENBQUFHLEdBQUEsQ0FBQU4sQ0FBQSxVQUFBRyxDQUFBLENBQUFJLEdBQUEsQ0FBQVAsQ0FBQSxPQUFBUSxDQUFBLEtBQUFDLFNBQUEsVUFBQUMsQ0FBQSxHQUFBQyxN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
;