kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
99 lines (94 loc) • 13.6 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof = require("@babel/runtime/helpers/typeof");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.addNewLayersToSplitMap = addNewLayersToSplitMap;
exports.computeSplitMapLayers = computeSplitMapLayers;
exports.getInitialMapLayersForSplitMap = getInitialMapLayersForSplitMap;
exports.removeLayerFromSplitMaps = removeLayerFromSplitMaps;
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _lodash = _interopRequireDefault(require("lodash.clonedeep"));
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } // SPDX-License-Identifier: MIT
// Copyright contributors to the kepler.gl project
/**
* Add new layers to both existing maps
* @param {Object} splitMaps
* @param {Object|Array<Object>} layers
* @returns {Array<Object>} new splitMaps
*/
function addNewLayersToSplitMap(splitMaps, layers) {
var newLayers = Array.isArray(layers) ? layers : [layers];
if (!splitMaps.length || !newLayers.length) {
return splitMaps;
}
// add new layer to both maps,
// don't override, if layer.id is already in splitMaps
return splitMaps.map(function (settings) {
return _objectSpread(_objectSpread({}, settings), {}, {
layers: _objectSpread(_objectSpread({}, settings.layers), newLayers.reduce(function (accu, newLayer) {
return (
// @ts-ignore
newLayer.id in settings.layers || !newLayer.config.isVisible ? accu : _objectSpread(_objectSpread({}, accu), {}, (0, _defineProperty2["default"])({}, newLayer.id, newLayer.config.isVisible))
);
}, {}))
});
});
}
/**
* Remove an existing layer from split map settings
* @param {Object} splitMaps
* @param {Object} layer
* @returns {Object} Maps of custom layer objects
*/
function removeLayerFromSplitMaps(splitMaps, layer) {
if (!splitMaps.length) {
return splitMaps;
}
return splitMaps.map(function (settings) {
// eslint-disable-next-line @typescript-eslint/no-unused-vars
var _settings$layers = settings.layers,
_layer$id = layer.id,
_ = _settings$layers[_layer$id],
newLayers = (0, _objectWithoutProperties2["default"])(_settings$layers, [_layer$id].map(_toPropertyKey));
return _objectSpread(_objectSpread({}, settings), {}, {
layers: newLayers
});
});
}
/**
* This method will compute the default maps layer settings
* based on the current layers visibility
* @param {Array<Object>} layers
* @returns {Array<Object>} layer visibility for each panel
*/
function getInitialMapLayersForSplitMap(layers) {
return layers.filter(function (layer) {
return layer.config.isVisible;
}).reduce(function (newLayers, currentLayer) {
return _objectSpread(_objectSpread({}, newLayers), {}, (0, _defineProperty2["default"])({}, currentLayer.id, currentLayer.config.isVisible));
}, {});
}
/**
* This method will get default splitMap settings based on existing layers
* @param {Array<Object>} layers
* @param {Object} options
* @returns {Array<Object>} split map settings
*/
function computeSplitMapLayers(layers, options) {
var mapLayers = getInitialMapLayersForSplitMap(layers);
var _ref = options || {},
duplicate = _ref.duplicate;
// show all visible layers in left map, leave right map empty
return [{
layers: mapLayers
}, {
layers: duplicate ? (0, _lodash["default"])(mapLayers) : {}
}];
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfdG9Qcm9wZXJ0eUtleSIsInQiLCJpIiwiX3RvUHJpbWl0aXZlIiwiX3R5cGVvZiIsInIiLCJlIiwiU3ltYm9sIiwidG9QcmltaXRpdmUiLCJjYWxsIiwiVHlwZUVycm9yIiwiU3RyaW5nIiwiTnVtYmVyIiwib3duS2V5cyIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJhZGROZXdMYXllcnNUb1NwbGl0TWFwIiwic3BsaXRNYXBzIiwibGF5ZXJzIiwibmV3TGF5ZXJzIiwiQXJyYXkiLCJpc0FycmF5IiwibWFwIiwic2V0dGluZ3MiLCJyZWR1Y2UiLCJhY2N1IiwibmV3TGF5ZXIiLCJpZCIsImNvbmZpZyIsImlzVmlzaWJsZSIsInJlbW92ZUxheWVyRnJvbVNwbGl0TWFwcyIsImxheWVyIiwiX3NldHRpbmdzJGxheWVycyIsIl9sYXllciRpZCIsIl8iLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMyIiwiZ2V0SW5pdGlhbE1hcExheWVyc0ZvclNwbGl0TWFwIiwiY3VycmVudExheWVyIiwiY29tcHV0ZVNwbGl0TWFwTGF5ZXJzIiwib3B0aW9ucyIsIm1hcExheWVycyIsIl9yZWYiLCJkdXBsaWNhdGUiLCJjbG9uZURlZXAiXSwic291cmNlcyI6WyIuLi9zcmMvc3BsaXQtbWFwLXV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBjbG9uZURlZXAgZnJvbSAnbG9kYXNoLmNsb25lZGVlcCc7XG5cbi8qKlxuICogQWRkIG5ldyBsYXllcnMgdG8gYm90aCBleGlzdGluZyBtYXBzXG4gKiBAcGFyYW0ge09iamVjdH0gc3BsaXRNYXBzXG4gKiBAcGFyYW0ge09iamVjdHxBcnJheTxPYmplY3Q+fSBsYXllcnNcbiAqIEByZXR1cm5zIHtBcnJheTxPYmplY3Q+fSBuZXcgc3BsaXRNYXBzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGROZXdMYXllcnNUb1NwbGl0TWFwKHNwbGl0TWFwcywgbGF5ZXJzKSB7XG4gIGNvbnN0IG5ld0xheWVycyA9IEFycmF5LmlzQXJyYXkobGF5ZXJzKSA/IGxheWVycyA6IFtsYXllcnNdO1xuXG4gIGlmICghc3BsaXRNYXBzLmxlbmd0aCB8fCAhbmV3TGF5ZXJzLmxlbmd0aCkge1xuICAgIHJldHVybiBzcGxpdE1hcHM7XG4gIH1cblxuICAvLyBhZGQgbmV3IGxheWVyIHRvIGJvdGggbWFwcyxcbiAgLy8gZG9uJ3Qgb3ZlcnJpZGUsIGlmIGxheWVyLmlkIGlzIGFscmVhZHkgaW4gc3BsaXRNYXBzXG4gIHJldHVybiBzcGxpdE1hcHMubWFwKHNldHRpbmdzID0+ICh7XG4gICAgLi4uc2V0dGluZ3MsXG4gICAgbGF5ZXJzOiB7XG4gICAgICAuLi5zZXR0aW5ncy5sYXllcnMsXG4gICAgICAuLi5uZXdMYXllcnMucmVkdWNlKFxuICAgICAgICAoYWNjdSwgbmV3TGF5ZXIpID0+XG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIG5ld0xheWVyLmlkIGluIHNldHRpbmdzLmxheWVycyB8fCAhbmV3TGF5ZXIuY29uZmlnLmlzVmlzaWJsZVxuICAgICAgICAgICAgPyBhY2N1XG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAuLi5hY2N1LFxuICAgICAgICAgICAgICAgIFtuZXdMYXllci5pZF06IG5ld0xheWVyLmNvbmZpZy5pc1Zpc2libGVcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAge31cbiAgICAgIClcbiAgICB9XG4gIH0pKTtcbn1cblxuLyoqXG4gKiBSZW1vdmUgYW4gZXhpc3RpbmcgbGF5ZXIgZnJvbSBzcGxpdCBtYXAgc2V0dGluZ3NcbiAqIEBwYXJhbSB7T2JqZWN0fSBzcGxpdE1hcHNcbiAqIEBwYXJhbSB7T2JqZWN0fSBsYXllclxuICogQHJldHVybnMge09iamVjdH0gTWFwcyBvZiBjdXN0b20gbGF5ZXIgb2JqZWN0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzKHNwbGl0TWFwcywgbGF5ZXIpIHtcbiAgaWYgKCFzcGxpdE1hcHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHNwbGl0TWFwcztcbiAgfVxuICByZXR1cm4gc3BsaXRNYXBzLm1hcChzZXR0aW5ncyA9PiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIGNvbnN0IHtbbGF5ZXIuaWRdOiBfLCAuLi5uZXdMYXllcnN9ID0gc2V0dGluZ3MubGF5ZXJzO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zZXR0aW5ncyxcbiAgICAgIGxheWVyczogbmV3TGF5ZXJzXG4gICAgfTtcbiAgfSk7XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2Qgd2lsbCBjb21wdXRlIHRoZSBkZWZhdWx0IG1hcHMgbGF5ZXIgc2V0dGluZ3NcbiAqIGJhc2VkIG9uIHRoZSBjdXJyZW50IGxheWVycyB2aXNpYmlsaXR5XG4gKiBAcGFyYW0ge0FycmF5PE9iamVjdD59IGxheWVyc1xuICogQHJldHVybnMge0FycmF5PE9iamVjdD59IGxheWVyIHZpc2liaWxpdHkgZm9yIGVhY2ggcGFuZWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEluaXRpYWxNYXBMYXllcnNGb3JTcGxpdE1hcChsYXllcnMpIHtcbiAgcmV0dXJuIGxheWVyc1xuICAgIC5maWx0ZXIobGF5ZXIgPT4gbGF5ZXIuY29uZmlnLmlzVmlzaWJsZSlcbiAgICAucmVkdWNlKFxuICAgICAgKG5ld0xheWVycywgY3VycmVudExheWVyKSA9PiAoe1xuICAgICAgICAuLi5uZXdMYXllcnMsXG4gICAgICAgIFtjdXJyZW50TGF5ZXIuaWRdOiBjdXJyZW50TGF5ZXIuY29uZmlnLmlzVmlzaWJsZVxuICAgICAgfSksXG4gICAgICB7fVxuICAgICk7XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2Qgd2lsbCBnZXQgZGVmYXVsdCBzcGxpdE1hcCBzZXR0aW5ncyBiYXNlZCBvbiBleGlzdGluZyBsYXllcnNcbiAqIEBwYXJhbSB7QXJyYXk8T2JqZWN0Pn0gbGF5ZXJzXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICogQHJldHVybnMge0FycmF5PE9iamVjdD59IHNwbGl0IG1hcCBzZXR0aW5nc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZVNwbGl0TWFwTGF5ZXJzKGxheWVycywgb3B0aW9ucz86IHtkdXBsaWNhdGU6IGJvb2xlYW59KSB7XG4gIGNvbnN0IG1hcExheWVycyA9IGdldEluaXRpYWxNYXBMYXllcnNGb3JTcGxpdE1hcChsYXllcnMpO1xuICBjb25zdCB7ZHVwbGljYXRlfSA9IG9wdGlvbnMgfHwge307XG4gIC8vIHNob3cgYWxsIHZpc2libGUgbGF5ZXJzIGluIGxlZnQgbWFwLCBsZWF2ZSByaWdodCBtYXAgZW1wdHlcbiAgcmV0dXJuIFt7bGF5ZXJzOiBtYXBMYXllcnN9LCB7bGF5ZXJzOiBkdXBsaWNhdGUgPyBjbG9uZURlZXAobWFwTGF5ZXJzKSA6IHt9fV07XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxPQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFBeUMsU0FBQUMsZUFBQUMsQ0FBQSxRQUFBQyxDQUFBLEdBQUFDLFlBQUEsQ0FBQUYsQ0FBQSxnQ0FBQUcsT0FBQSxDQUFBRixDQUFBLElBQUFBLENB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
;