kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
99 lines (93 loc) • 14.7 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 _isEqual = _interopRequireDefault(require("lodash/isEqual"));
var _pick = _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, _isEqual["default"])((0, _pick["default"])(a, props), (0, _pick["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,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfaXNFcXVhbCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfcGljayIsIl9yZWR1Y2VycyIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIk1hcFZpZXdTdGF0ZUNvbnRleHQiLCJleHBvcnRzIiwiY3JlYXRlQ29udGV4dCIsImdldEludGVybmFsVmlld1N0YXRlIiwibGF0aXR1ZGUiLCJsb25naXR1ZGUiLCJ6b29tIiwic2V0SW50ZXJuYWxWaWV3U3RhdGUiLCJNYXBWaWV3U3RhdGVDb250ZXh0UHJvdmlkZXIiLCJfcmVmIiwibWFwU3RhdGUiLCJjaGlsZHJlbiIsIl9yZWYyIiwiaXNTcGxpdCIsImlzVmlld3BvcnRTeW5jZWQiLCJfdXNlU3RhdGUiLCJ1c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheTIiLCJ2aWV3U3RhdGVzIiwic2V0Vmlld1N0YXRlcyIsInVzZUVmZmVjdCIsInByaW1hcnlTdGF0ZSIsInByb3BzIiwia2V5cyIsImZpbHRlciIsImtleSIsInN0YXJ0c1dpdGgiLCJoYXNDaGFuZ2VkIiwiYiIsImlzRXF1YWwiLCJwaWNrIiwiX21hcFN0YXRlJHNwbGl0TWFwVmllIiwic3BsaXRNYXBWaWV3cG9ydHMiLCJzb21lIiwicyIsInBpY2tWaWV3cG9ydFByb3BzRnJvbU1hcFN0YXRlIiwidmFsdWUiLCJfdmlld1N0YXRlcyRpbmRleCIsImluZGV4IiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwibmV3Vmlld1N0YXRlIiwicHJldlZpZXdTdGF0ZXMiLCJuZXh0Vmlld1N0YXRlcyIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJjcmVhdGVFbGVtZW50IiwiUHJvdmlkZXIiXSwic291cmNlcyI6WyIuLi9zcmMvbWFwLXZpZXctc3RhdGUtY29udGV4dC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IFJlYWN0LCB7dXNlU3RhdGUsIHVzZUVmZmVjdCwgY3JlYXRlQ29udGV4dH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IGlzRXF1YWwgZnJvbSAnbG9kYXNoL2lzRXF1YWwnO1xuaW1wb3J0IHBpY2sgZnJvbSAnbG9kYXNoL3BpY2snO1xudHlwZSBNYXBWaWV3U3RhdGUgPSB7XG4gIGxhdGl0dWRlOiBudW1iZXI7XG4gIGxvbmdpdHVkZTogbnVtYmVyO1xuICB6b29tOiBudW1iZXI7XG4gIGJlYXJpbmc/OiBudW1iZXI7XG4gIHBpdGNoPzogbnVtYmVyO1xufTtcbmltcG9ydCB7cGlja1ZpZXdwb3J0UHJvcHNGcm9tTWFwU3RhdGV9IGZyb20gJ0BrZXBsZXIuZ2wvcmVkdWNlcnMnO1xuXG5pbXBvcnQge01hcFN0YXRlfSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcblxuZXhwb3J0IHR5cGUgTWFwVmlld1N0YXRlQ29udGV4dFR5cGUgPSB7XG4gIGdldEludGVybmFsVmlld1N0YXRlOiAoaW5kZXg/OiBudW1iZXIpID0+IE1hcFZpZXdTdGF0ZTtcbiAgc2V0SW50ZXJuYWxWaWV3U3RhdGU6ICh2aWV3U3RhdGU/OiBNYXBWaWV3U3RhdGUsIGluZGV4PzogbnVtYmVyKSA9PiB2b2lkO1xufTtcblxuZXhwb3J0IGNvbnN0IE1hcFZpZXdTdGF0ZUNvbnRleHQ6IFJlYWN0LkNvbnRleHQ8TWFwVmlld1N0YXRlQ29udGV4dFR5cGU+ID0gY3JlYXRlQ29udGV4dCh7XG4gIGdldEludGVybmFsVmlld1N0YXRlOiAoKSA9PiAoe2xhdGl0dWRlOiAwLCBsb25naXR1ZGU6IDAsIHpvb206IDB9KSxcbiAgc2V0SW50ZXJuYWxWaWV3U3RhdGU6ICgpID0+IHtcbiAgICByZXR1cm47XG4gIH1cbn0pO1xuXG4vKipcbiAqIFRoaXMgY29udGV4dCBwcm92aWRlciBpcyB1c2VkIHRvIGxvY2FsaXplIHRoZSBtYXAgdmlldyBzdGF0ZSBzb1xuICogdGhhdCBjaGFuZ2VzIHRvIHRoZSBtYXAgdmlldyBzdGF0ZSBkbyBub3QgYWZmZWN0IHRoZSByZXN0IG9mIHRoZSBhcHAsXG4gKiBtYWlubHkgdG8gcHJldmVudCBpc3N1ZXMgd2UgZXhwZXJpZW5jZWQgd2l0aCBiYXNlbWFwL2RlY2sgdmlld3BvcnQgc3luY2luZy5cbiAqL1xuXG5leHBvcnQgY29uc3QgTWFwVmlld1N0YXRlQ29udGV4dFByb3ZpZGVyID0gKHtcbiAgbWFwU3RhdGUsXG4gIGNoaWxkcmVuXG59OiB7XG4gIG1hcFN0YXRlOiBNYXBTdGF0ZTtcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZTtcbn0pID0+IHtcbiAgY29uc3Qge2lzU3BsaXQsIGlzVmlld3BvcnRTeW5jZWR9ID0gbWFwU3RhdGUgfHwge307XG5cbiAgLy8gU3RvcmUgbG9jYWxseSBtYXAgdmlldyBzdGF0ZXMgYnkgbWFwSW5kZXhcbiAgY29uc3QgW3ZpZXdTdGF0ZXMsIHNldFZpZXdTdGF0ZXNdID0gdXNlU3RhdGUoW21hcFN0YXRlXSk7XG5cbiAgLy8gRGV0ZWN0IGFuZCBhcHBseSBvdXRzaWRlIHZpZXdwb3J0IGNoYW5nZXNcbiAgLy8gKGUuZy4gZnJvbSBnZW9jb2RlciBvciB3aGVuIHN3aXRjaGluZyB0byAzZCBtb2RlKVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghbWFwU3RhdGUpIHJldHVybjtcbiAgICBjb25zdCBwcmltYXJ5U3RhdGUgPSB2aWV3U3RhdGVzWzBdO1xuICAgIGlmIChwcmltYXJ5U3RhdGUgPT09IG1hcFN0YXRlKSByZXR1cm47XG4gICAgY29uc3QgcHJvcHMgPSBPYmplY3Qua2V5cyhwcmltYXJ5U3RhdGUpLmZpbHRlcihrZXkgPT4gIWtleS5zdGFydHNXaXRoKCd0cmFuc2l0aW9uJykpO1xuICAgIGNvbnN0IGhhc0NoYW5nZWQgPSAoYSwgYikgPT4gIWlzRXF1YWwocGljayhhLCBwcm9wcyksIHBpY2soYiwgcHJvcHMpKTtcbiAgICBpZiAoaXNTcGxpdCAmJiAhaXNWaWV3cG9ydFN5bmNlZCkge1xuICAgICAgaWYgKG1hcFN0YXRlLnNwbGl0TWFwVmlld3BvcnRzPy5zb21lKChzLCBpKSA9PiBoYXNDaGFuZ2VkKHMsIHZpZXdTdGF0ZXNbaV0pKSkge1xuICAgICAgICBzZXRWaWV3U3RhdGVzKG1hcFN0YXRlLnNwbGl0TWFwVmlld3BvcnRzIGFzIE1hcFN0YXRlW10pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaGFzQ2hhbmdlZChwcmltYXJ5U3RhdGUsIG1hcFN0YXRlKSkge1xuICAgICAgc2V0Vmlld1N0YXRlcyhbcGlja1ZpZXdwb3J0UHJvcHNGcm9tTWFwU3RhdGUobWFwU3RhdGUpXSBhcyBNYXBTdGF0ZVtdKTtcbiAgICB9XG4gICAgLy8gT25seSB1cGRhdGUgaW50ZXJuYWxWaWV3U3RhdGUgd2hlbiB2aWV3U3RhdGUgY2hhbmdlc1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW21hcFN0YXRlXSk7XG5cbiAgY29uc3QgdmFsdWUgPSB7XG4gICAgZ2V0SW50ZXJuYWxWaWV3U3RhdGU6IChpbmRleCA9IDApID0+IHZpZXdTdGF0ZXNbaW5kZXhdID8/IHZpZXdTdGF0ZXNbMF0sXG4gICAgc2V0SW50ZXJuYWxWaWV3U3RhdGU6IChuZXdWaWV3U3RhdGUsIGluZGV4ID0gMCkgPT4ge1xuICAgICAgc2V0Vmlld1N0YXRlcyhwcmV2Vmlld1N0YXRlcyA9PiB7XG4gICAgICAgIGlmIChpc1NwbGl0ICYmICFpc1ZpZXdwb3J0U3luY2VkKSB7XG4gICAgICAgICAgY29uc3QgbmV4dFZpZXdTdGF0ZXMgPSBbLi4ucHJldlZpZXdTdGF0ZXNdO1xuICAgICAgICAgIG5leHRWaWV3U3RhdGVzW2luZGV4XSA9IG5ld1ZpZXdTdGF0ZSBhcyBNYXBTdGF0ZTtcbiAgICAgICAgICByZXR1cm4gbmV4dFZpZXdTdGF0ZXM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtuZXdWaWV3U3RhdGVdIGFzIE1hcFN0YXRlW107XG4gICAgICB9KTtcbiAgICB9XG4gIH0gYXMgTWFwVmlld1N0YXRlQ29udGV4dFR5cGU7XG4gIHJldHVybiA8TWFwVmlld1N0YXRlQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17dmFsdWV9PntjaGlsZHJlbn08L01hcFZpZXdTdGF0ZUNvbnRleHQuUHJvdmlkZXI+O1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUdBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFFBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLEtBQUEsR0FBQUQsc0JBQUEsQ0FBQUYsT0FBQTtBQVFBLElBQUFJLFNBQUEsR0FBQUosT0FBQTtBQUFrRSxTQUFBSyx5QkFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxtQkFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBRix3QkFBQSxZQUFBQSx5QkFBQUMsQ0FBQSxXQUFBQSxDQUFBLEdBQUFHLENBQUEsR0FBQUQsQ0FBQSxLQUFBRixDQUFBO0FBQUEsU0FBQVAsd0JBQUFPLENBQUEsRUFBQUUsQ0FBQSxTQUFBQSxDQUFBLElBQUFGLENBQUEsSUFBQUEsQ0FBQSxDQUFBSSxVQUFBLFNBQUFKLENBQUEsZUFBQUEsQ0FBQSxnQkFBQUssT0FBQSxDQUFBTCxDQUFBLDBCQUFBQSxDQUFBLHNCQUFBQSxDQUFBLFFBQUFHLENBQUEsR0FBQUosd0JBQUEsQ0FBQUcsQ0FBQSxPQUFBQyxDQUFBLElBQUFBLENBQUEsQ0FBQUcsR0FBQSxDQUFBTixDQUFB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QUEsQ0FBNEJFLElBQUksQ0FBQyxVQUFDQyxDQUFDLEVBQUVyQyxDQUFDO1FBQUEsT0FBSzhCLFVBQVUsQ0FBQ08sQ0FBQyxFQUFFaEIsVUFBVSxDQUFDckIsQ0FBQyxDQUFDLENBQUM7TUFBQSxFQUFDLEVBQUU7UUFDNUVzQixhQUFhLENBQUNWLFFBQVEsQ0FBQ3VCLGlCQUErQixDQUFDO01BQ3pEO0lBQ0YsQ0FBQyxNQUFNLElBQUlMLFVBQVUsQ0FBQ04sWUFBWSxFQUFFWixRQUFRLENBQUMsRUFBRTtNQUM3Q1UsYUFBYSxDQUFDLENBQUMsSUFBQWdCLHVDQUE2QixFQUFDMUIsUUFBUSxDQUFDLENBQWUsQ0FBQztJQUN4RTtJQUNBO0lBQ0E7RUFDRixDQUFDLEVBQUUsQ0FBQ0EsUUFBUSxDQUFDLENBQUM7RUFFZCxJQUFNMkIsS0FBSyxHQUFHO0lBQ1psQyxvQkFBb0IsRUFBRSxTQUF0QkEsb0JBQW9CQSxDQUFBO01BQUEsSUFBQW1DLGlCQUFBO01BQUEsSUFBR0MsS0FBSyxHQUFBQyxTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBRSxTQUFBLEdBQUFGLFNBQUEsTUFBRyxDQUFDO01BQUEsUUFBQUYsaUJBQUEsR0FBS25CLFVBQVUsQ0FBQ29CLEtBQUssQ0FBQyxjQUFBRCxpQkFBQSxjQUFBQSxpQkFBQSxHQUFJbkIsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUFBO0lBQ3ZFWixvQkFBb0IsRUFBRSxTQUF0QkEsb0JBQW9CQSxDQUFHb0MsWUFBWSxFQUFnQjtNQUFBLElBQWRKLEtBQUssR0FBQUMsU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQUUsU0FBQSxHQUFBRixTQUFBLE1BQUcsQ0FBQztNQUM1Q3BCLGFBQWEsQ0FBQyxVQUFBd0IsY0FBYyxFQUFJO1FBQzlCLElBQUkvQixPQUFPLElBQUksQ0FBQ0MsZ0JBQWdCLEVBQUU7VUFDaEMsSUFBTStCLGNBQWMsT0FBQUMsbUJBQUEsYUFBT0YsY0FBYyxDQUFDO1VBQzFDQyxjQUFjLENBQUNOLEtBQUssQ0FBQyxHQUFHSSxZQUF3QjtVQUNoRCxPQUFPRSxjQUFjO1FBQ3ZCO1FBQ0EsT0FBTyxDQUFDRixZQUFZLENBQUM7TUFDdkIsQ0FBQyxDQUFDO0lBQ0o7RUFDRixDQUE0QjtFQUM1QixvQkFBT3RFLE1BQUEsWUFBQTBFLGFBQUEsQ0FBQy9DLG1CQUFtQixDQUFDZ0QsUUFBUTtJQUFDWCxLQUFLLEVBQUVBO0VBQU0sR0FBRTFCLFFBQXVDLENBQUM7QUFDOUYsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==