UNPKG

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
"use strict"; 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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