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 _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,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfaXNFcXVhbCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfcGljayIsIl9yZWR1Y2VycyIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIk1hcFZpZXdTdGF0ZUNvbnRleHQiLCJleHBvcnRzIiwiY3JlYXRlQ29udGV4dCIsImdldEludGVybmFsVmlld1N0YXRlIiwibGF0aXR1ZGUiLCJsb25naXR1ZGUiLCJ6b29tIiwic2V0SW50ZXJuYWxWaWV3U3RhdGUiLCJNYXBWaWV3U3RhdGVDb250ZXh0UHJvdmlkZXIiLCJfcmVmIiwibWFwU3RhdGUiLCJjaGlsZHJlbiIsIl9yZWYyIiwiaXNTcGxpdCIsImlzVmlld3BvcnRTeW5jZWQiLCJfdXNlU3RhdGUiLCJ1c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheTIiLCJ2aWV3U3RhdGVzIiwic2V0Vmlld1N0YXRlcyIsInVzZUVmZmVjdCIsInByaW1hcnlTdGF0ZSIsInByb3BzIiwia2V5cyIsImZpbHRlciIsImtleSIsInN0YXJ0c1dpdGgiLCJoYXNDaGFuZ2VkIiwiYiIsImlzRXF1YWwiLCJwaWNrIiwiX21hcFN0YXRlJHNwbGl0TWFwVmllIiwic3BsaXRNYXBWaWV3cG9ydHMiLCJzb21lIiwicyIsInBpY2tWaWV3cG9ydFByb3BzRnJvbU1hcFN0YXRlIiwidmFsdWUiLCJfdmlld1N0YXRlcyRpbmRleCIsImluZGV4IiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwibmV3Vmlld1N0YXRlIiwicHJldlZpZXdTdGF0ZXMiLCJuZXh0Vmlld1N0YXRlcyIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJjcmVhdGVFbGVtZW50IiwiUHJvdmlkZXIiXSwic291cmNlcyI6WyIuLi9zcmMvbWFwLXZpZXctc3RhdGUtY29udGV4dC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IFJlYWN0LCB7dXNlU3RhdGUsIHVzZUVmZmVjdCwgY3JlYXRlQ29udGV4dH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IGlzRXF1YWwgZnJvbSAnbG9kYXNoL2lzRXF1YWwnO1xuaW1wb3J0IHBpY2sgZnJvbSAnbG9kYXNoL3BpY2snO1xuaW1wb3J0IHtNYXBWaWV3U3RhdGV9IGZyb20gJ0BkZWNrLmdsL2NvcmUvdHlwZWQnO1xuaW1wb3J0IHtwaWNrVmlld3BvcnRQcm9wc0Zyb21NYXBTdGF0ZX0gZnJvbSAnQGtlcGxlci5nbC9yZWR1Y2Vycyc7XG5cbmltcG9ydCB7TWFwU3RhdGV9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuXG5leHBvcnQgdHlwZSBNYXBWaWV3U3RhdGVDb250ZXh0VHlwZSA9IHtcbiAgZ2V0SW50ZXJuYWxWaWV3U3RhdGU6IChpbmRleD86IG51bWJlcikgPT4gTWFwVmlld1N0YXRlO1xuICBzZXRJbnRlcm5hbFZpZXdTdGF0ZTogKHZpZXdTdGF0ZT86IE1hcFZpZXdTdGF0ZSwgaW5kZXg/OiBudW1iZXIpID0+IHZvaWQ7XG59O1xuXG5leHBvcnQgY29uc3QgTWFwVmlld1N0YXRlQ29udGV4dDogUmVhY3QuQ29udGV4dDxNYXBWaWV3U3RhdGVDb250ZXh0VHlwZT4gPSBjcmVhdGVDb250ZXh0KHtcbiAgZ2V0SW50ZXJuYWxWaWV3U3RhdGU6ICgpID0+ICh7bGF0aXR1ZGU6IDAsIGxvbmdpdHVkZTogMCwgem9vbTogMH0pLFxuICBzZXRJbnRlcm5hbFZpZXdTdGF0ZTogKCkgPT4ge1xuICAgIHJldHVybjtcbiAgfVxufSk7XG5cbi8qKlxuICogVGhpcyBjb250ZXh0IHByb3ZpZGVyIGlzIHVzZWQgdG8gbG9jYWxpemUgdGhlIG1hcCB2aWV3IHN0YXRlIHNvXG4gKiB0aGF0IGNoYW5nZXMgdG8gdGhlIG1hcCB2aWV3IHN0YXRlIGRvIG5vdCBhZmZlY3QgdGhlIHJlc3Qgb2YgdGhlIGFwcCxcbiAqIG1haW5seSB0byBwcmV2ZW50IGlzc3VlcyB3ZSBleHBlcmllbmNlZCB3aXRoIGJhc2VtYXAvZGVjayB2aWV3cG9ydCBzeW5jaW5nLlxuICovXG5cbmV4cG9ydCBjb25zdCBNYXBWaWV3U3RhdGVDb250ZXh0UHJvdmlkZXIgPSAoe1xuICBtYXBTdGF0ZSxcbiAgY2hpbGRyZW5cbn06IHtcbiAgbWFwU3RhdGU6IE1hcFN0YXRlO1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xufSkgPT4ge1xuICBjb25zdCB7aXNTcGxpdCwgaXNWaWV3cG9ydFN5bmNlZH0gPSBtYXBTdGF0ZSB8fCB7fTtcblxuICAvLyBTdG9yZSBsb2NhbGx5IG1hcCB2aWV3IHN0YXRlcyBieSBtYXBJbmRleFxuICBjb25zdCBbdmlld1N0YXRlcywgc2V0Vmlld1N0YXRlc10gPSB1c2VTdGF0ZShbbWFwU3RhdGVdKTtcblxuICAvLyBEZXRlY3QgYW5kIGFwcGx5IG91dHNpZGUgdmlld3BvcnQgY2hhbmdlc1xuICAvLyAoZS5nLiBmcm9tIGdlb2NvZGVyIG9yIHdoZW4gc3dpdGNoaW5nIHRvIDNkIG1vZGUpXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFtYXBTdGF0ZSkgcmV0dXJuO1xuICAgIGNvbnN0IHByaW1hcnlTdGF0ZSA9IHZpZXdTdGF0ZXNbMF07XG4gICAgaWYgKHByaW1hcnlTdGF0ZSA9PT0gbWFwU3RhdGUpIHJldHVybjtcbiAgICBjb25zdCBwcm9wcyA9IE9iamVjdC5rZXlzKHByaW1hcnlTdGF0ZSkuZmlsdGVyKGtleSA9PiAha2V5LnN0YXJ0c1dpdGgoJ3RyYW5zaXRpb24nKSk7XG4gICAgY29uc3QgaGFzQ2hhbmdlZCA9IChhLCBiKSA9PiAhaXNFcXVhbChwaWNrKGEsIHByb3BzKSwgcGljayhiLCBwcm9wcykpO1xuICAgIGlmIChpc1NwbGl0ICYmICFpc1ZpZXdwb3J0U3luY2VkKSB7XG4gICAgICBpZiAobWFwU3RhdGUuc3BsaXRNYXBWaWV3cG9ydHM/LnNvbWUoKHMsIGkpID0+IGhhc0NoYW5nZWQocywgdmlld1N0YXRlc1tpXSkpKSB7XG4gICAgICAgIHNldFZpZXdTdGF0ZXMobWFwU3RhdGUuc3BsaXRNYXBWaWV3cG9ydHMgYXMgTWFwU3RhdGVbXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChoYXNDaGFuZ2VkKHByaW1hcnlTdGF0ZSwgbWFwU3RhdGUpKSB7XG4gICAgICBzZXRWaWV3U3RhdGVzKFtwaWNrVmlld3BvcnRQcm9wc0Zyb21NYXBTdGF0ZShtYXBTdGF0ZSldIGFzIE1hcFN0YXRlW10pO1xuICAgIH1cbiAgICAvLyBPbmx5IHVwZGF0ZSBpbnRlcm5hbFZpZXdTdGF0ZSB3aGVuIHZpZXdTdGF0ZSBjaGFuZ2VzXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCBbbWFwU3RhdGVdKTtcblxuICBjb25zdCB2YWx1ZSA9IHtcbiAgICBnZXRJbnRlcm5hbFZpZXdTdGF0ZTogKGluZGV4ID0gMCkgPT4gdmlld1N0YXRlc1tpbmRleF0gPz8gdmlld1N0YXRlc1swXSxcbiAgICBzZXRJbnRlcm5hbFZpZXdTdGF0ZTogKG5ld1ZpZXdTdGF0ZSwgaW5kZXggPSAwKSA9PiB7XG4gICAgICBzZXRWaWV3U3RhdGVzKHByZXZWaWV3U3RhdGVzID0+IHtcbiAgICAgICAgaWYgKGlzU3BsaXQgJiYgIWlzVmlld3BvcnRTeW5jZWQpIHtcbiAgICAgICAgICBjb25zdCBuZXh0Vmlld1N0YXRlcyA9IFsuLi5wcmV2Vmlld1N0YXRlc107XG4gICAgICAgICAgbmV4dFZpZXdTdGF0ZXNbaW5kZXhdID0gbmV3Vmlld1N0YXRlIGFzIE1hcFN0YXRlO1xuICAgICAgICAgIHJldHVybiBuZXh0Vmlld1N0YXRlcztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW25ld1ZpZXdTdGF0ZV0gYXMgTWFwU3RhdGVbXTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSBhcyBNYXBWaWV3U3RhdGVDb250ZXh0VHlwZTtcbiAgcmV0dXJuIDxNYXBWaWV3U3RhdGVDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXt2YWx1ZX0+e2NoaWxkcmVufTwvTWFwVmlld1N0YXRlQ29udGV4dC5Qcm92aWRlcj47XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBR0EsSUFBQUEsTUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsUUFBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsS0FBQSxHQUFBRCxzQkFBQSxDQUFBRixPQUFBO0FBRUEsSUFBQUksU0FBQSxHQUFBSixPQUFBO0FBQWtFLFNBQUFLLHlCQUFBQyxDQUFBLDZCQUFBQyxPQUFBLG1CQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFGLHdCQUFBLFlBQUFBLHlCQUFBQyxDQUFBLFdBQUFBLENBQUEsR0FBQUcsQ0FBQSxHQUFBRCxDQUFBLEtBQUFGLENBQUE7QUFBQSxTQUFBUCx3QkFBQU8sQ0FBQSxFQUFBRSxDQUFBLFNBQUFBLENBQUEsSUFBQUYsQ0FBQSxJQUFBQSxDQUFBLENBQUFJLFVBQUEsU0FBQUosQ0FBQSxlQUFBQSxDQUFBLGdCQUFBSyxPQUFBLENBQUFMLENBQUEsMEJBQUFBLENBQUEsc0JBQUFBLENBQUEsUUFBQUcsQ0FBQSxHQUFBSix3QkFBQSxDQUFBRyxDQUFBLE9BQUFDLENBQUEsSUFBQUEsQ0FBQSxDQUFBRyxHQUFBLENBQUFOLENBQUEsVUFBQUcsQ0FBQSxDQUFBSSxHQUFBLENBQUFQLENBQUEsT0FBQVEsQ0FBQSxLQUFBQyxTQUFBLFVBQUFDLENBQUEsR0FBQUMsTUFB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
;