UNPKG

kepler.gl.geoiq

Version:

kepler.gl is a webgl based application to visualize large scale location data in the browser

133 lines (104 loc) 14.6 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = exports.addDataToMapComposed = exports.updateVisDataComposed = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _actionTypes = _interopRequireDefault(require("../constants/action-types")); var _mapStateUpdaters = require("./map-state-updaters"); var _uiStateUpdaters = require("./ui-state-updaters"); var _visStateUpdaters = require("./vis-state-updaters"); var _mapStyleUpdaters = require("./map-style-updaters"); var _dataUtils = require("../utils/data-utils"); var _filterUtils = require("../utils/filter-utils"); var _schemas = _interopRequireDefault(require("../schemas")); var _compostedUpdaters; function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } // compose action to apply result multiple reducers, with the output of one /** * Apply data and config to visState reducer * @param {object} state * @param {object} action * @param {object} action.options * @param {Boolean} action.options.centerMap * @param {Boolean} action.options.readOnly * @param {object} action.config * @returns state new reducer state */ var updateVisDataComposed = function updateVisDataComposed(state, action) { // keep a copy of oldLayers var oldLayers = state.visState.layers; var defaultOptions = { centerMap: true, disabledAddDefaultLayers: false }; var options = _objectSpread({}, defaultOptions, {}, action.options); action.options = _objectSpread({}, defaultOptions, {}, action.options); var visState = (0, _visStateUpdaters.updateVisDataUpdater)(state.visState, action); var bounds; if (options.centerMap) { // find map bounds for new layers var newLayers = visState.layers.filter(function (nl) { return !oldLayers.find(function (ol) { return ol === nl; }); }); bounds = (0, _dataUtils.findMapBounds)(newLayers); } return _objectSpread({}, state, { visState: visState, mapState: bounds ? (0, _mapStateUpdaters.fitBoundsUpdater)(state.mapState, { payload: bounds }) : state.mapState, uiState: _objectSpread({}, (0, _uiStateUpdaters.toggleModalUpdater)(state.uiState, { payload: null }), {}, options.hasOwnProperty('readOnly') ? { readOnly: options.readOnly } : {}) }); }; /** * Combine data and full configuration update in a single action * @param state * @param action {datasets, options, config} * @returns state */ exports.updateVisDataComposed = updateVisDataComposed; var addDataToMapComposed = function addDataToMapComposed(state, action) { var _action$payload = action.payload, datasets = _action$payload.datasets, options = _action$payload.options, config = _action$payload.config; var parsedConfig = config; if (config && config.config && config.version) { // if passed in saved config parsedConfig = _schemas["default"].parseSavedConfig(config); } // Update visState store var mergedState = updateVisDataComposed(state, { datasets: datasets, options: options, config: parsedConfig && parsedConfig.visState }); // Update mapState store mergedState = _objectSpread({}, mergedState, { mapState: (0, _mapStateUpdaters.receiveMapConfigUpdater)(mergedState.mapState, { payload: { mapState: parsedConfig && parsedConfig.mapState } }) }); // Update mapStyle store mergedState = _objectSpread({}, mergedState, { mapStyle: (0, _mapStyleUpdaters.receiveMapConfigUpdater)(mergedState.mapStyle, { payload: { mapStyle: parsedConfig && parsedConfig.mapStyle } }) }); return mergedState; }; exports.addDataToMapComposed = addDataToMapComposed; var compostedUpdaters = (_compostedUpdaters = {}, (0, _defineProperty2["default"])(_compostedUpdaters, _actionTypes["default"].UPDATE_VIS_DATA, updateVisDataComposed), (0, _defineProperty2["default"])(_compostedUpdaters, _actionTypes["default"].ADD_DATA_TO_MAP, addDataToMapComposed), _compostedUpdaters); var _default = compostedUpdaters; exports["default"] = _default; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZWR1Y2Vycy9jb21wb3NlcnMuanMiXSwibmFtZXMiOlsidXBkYXRlVmlzRGF0YUNvbXBvc2VkIiwic3RhdGUiLCJhY3Rpb24iLCJvbGRMYXllcnMiLCJ2aXNTdGF0ZSIsImxheWVycyIsImRlZmF1bHRPcHRpb25zIiwiY2VudGVyTWFwIiwiZGlzYWJsZWRBZGREZWZhdWx0TGF5ZXJzIiwib3B0aW9ucyIsImJvdW5kcyIsIm5ld0xheWVycyIsImZpbHRlciIsIm5sIiwiZmluZCIsIm9sIiwibWFwU3RhdGUiLCJwYXlsb2FkIiwidWlTdGF0ZSIsImhhc093blByb3BlcnR5IiwicmVhZE9ubHkiLCJhZGREYXRhVG9NYXBDb21wb3NlZCIsImRhdGFzZXRzIiwiY29uZmlnIiwicGFyc2VkQ29uZmlnIiwidmVyc2lvbiIsIktlcGxlckdsU2NoZW1hIiwicGFyc2VTYXZlZENvbmZpZyIsIm1lcmdlZFN0YXRlIiwibWFwU3R5bGUiLCJjb21wb3N0ZWRVcGRhdGVycyIsIkFjdGlvblR5cGVzIiwiVVBEQVRFX1ZJU19EQVRBIiwiQUREX0RBVEFfVE9fTUFQIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQW9CQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7QUFFQTs7QUFFQTs7Ozs7Ozs7OztBQVVPLElBQU1BLHFCQUFxQixHQUFHLFNBQXhCQSxxQkFBd0IsQ0FBQ0MsS0FBRCxFQUFRQyxNQUFSLEVBQW1CO0FBQ3REO0FBQ0EsTUFBTUMsU0FBUyxHQUFHRixLQUFLLENBQUNHLFFBQU4sQ0FBZUMsTUFBakM7QUFDQSxNQUFNQyxjQUFjLEdBQUc7QUFDckJDLElBQUFBLFNBQVMsRUFBRSxJQURVO0FBRXJCQyxJQUFBQSx3QkFBd0IsRUFBRTtBQUZMLEdBQXZCOztBQUtBLE1BQU1DLE9BQU8scUJBQ1JILGNBRFEsTUFFUkosTUFBTSxDQUFDTyxPQUZDLENBQWI7O0FBS0FQLEVBQUFBLE1BQU0sQ0FBQ08sT0FB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b0JBRlYsc0JBQXZCO2VBS2VTLGlCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDE5IFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IEFjdGlvblR5cGVzIGZyb20gJ2NvbnN0YW50cy9hY3Rpb24tdHlwZXMnO1xuaW1wb3J0IHtmaXRCb3VuZHNVcGRhdGVyfSBmcm9tICcuL21hcC1zdGF0ZS11cGRhdGVycyc7XG5pbXBvcnQge3RvZ2dsZU1vZGFsVXBkYXRlcn0gZnJvbSAnLi91aS1zdGF0ZS11cGRhdGVycyc7XG5pbXBvcnQge3VwZGF0ZVZpc0RhdGFVcGRhdGVyfSBmcm9tICcuL3Zpcy1zdGF0ZS11cGRhdGVycyc7XG5pbXBvcnQge3JlY2VpdmVNYXBDb25maWdVcGRhdGVyIGFzIHN0YXRlTWFwQ29uZmlnVXBkYXRlcn0gZnJvbSAnLi9tYXAtc3RhdGUtdXBkYXRlcnMnO1xuaW1wb3J0IHtyZWNlaXZlTWFwQ29uZmlnVXBkYXRlciBhcyBzdHlsZU1hcENvbmZpZ1VwZGF0ZXJ9IGZyb20gJy4vbWFwLXN0eWxlLXVwZGF0ZXJzJztcbmltcG9ydCB7ZmluZE1hcEJvdW5kc30gZnJvbSAndXRpbHMvZGF0YS11dGlscyc7XG5pbXBvcnQge2ZpbHRlckRhdGF9IGZyb20gJ3V0aWxzL2ZpbHRlci11dGlscyc7XG5pbXBvcnQgS2VwbGVyR2xTY2hlbWEgZnJvbSAnc2NoZW1hcyc7XG5cbi8vIGNvbXBvc2UgYWN0aW9uIHRvIGFwcGx5IHJlc3VsdCBtdWx0aXBsZSByZWR1Y2Vycywgd2l0aCB0aGUgb3V0cHV0IG9mIG9uZVxuXG4vKipcbiAqIEFwcGx5IGRhdGEgYW5kIGNvbmZpZyB0byB2aXNTdGF0ZSByZWR1Y2VyXG4gKiBAcGFyYW0ge29iamVjdH0gc3RhdGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBhY3Rpb25cbiAqIEBwYXJhbSB7b2JqZWN0fSBhY3Rpb24ub3B0aW9uc1xuICogQHBhcmFtIHtCb29sZWFufSBhY3Rpb24ub3B0aW9ucy5jZW50ZXJNYXBcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gYWN0aW9uLm9wdGlvbnMucmVhZE9ubHlcbiAqIEBwYXJhbSB7b2JqZWN0fSBhY3Rpb24uY29uZmlnXG4gKiBAcmV0dXJucyBzdGF0ZSBuZXcgcmVkdWNlciBzdGF0ZVxuICovXG5leHBvcnQgY29uc3QgdXBkYXRlVmlzRGF0YUNvbXBvc2VkID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgLy8ga2VlcCBhIGNvcHkgb2Ygb2xkTGF5ZXJzXG4gIGNvbnN0IG9sZExheWVycyA9IHN0YXRlLnZpc1N0YXRlLmxheWVycztcbiAgY29uc3QgZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgY2VudGVyTWFwOiB0cnVlLFxuICAgIGRpc2FibGVkQWRkRGVmYXVsdExheWVyczogZmFsc2VcbiAgfTtcblxuICBjb25zdCBvcHRpb25zID0ge1xuICAgIC4uLmRlZmF1bHRPcHRpb25zLFxuICAgIC4uLmFjdGlvbi5vcHRpb25zXG4gIH07XG5cbiAgYWN0aW9uLm9wdGlvbnMgPSB7XG4gICAgLi4uZGVmYXVsdE9wdGlvbnMsXG4gICAgLi4uYWN0aW9uLm9wdGlvbnNcbiAgfTtcblxuICBjb25zdCB2aXNTdGF0ZSA9IHVwZGF0ZVZpc0RhdGFVcGRhdGVyKHN0YXRlLnZpc1N0YXRlLCBhY3Rpb24pO1xuXG4gIGxldCBib3VuZHM7XG4gIGlmIChvcHRpb25zLmNlbnRlck1hcCkge1xuICAgIC8vIGZpbmQgbWFwIGJvdW5kcyBmb3IgbmV3IGxheWVyc1xuICAgIGNvbnN0IG5ld0xheWVycyA9IHZpc1N0YXRlLmxheWVycy5maWx0ZXIoXG4gICAgICBubCA9PiAhb2xkTGF5ZXJzLmZpbmQob2wgPT4gb2wgPT09IG5sKVxuICAgICk7XG4gICAgYm91bmRzID0gZmluZE1hcEJvdW5kcyhuZXdMYXllcnMpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICB2aXNTdGF0ZSxcbiAgICBtYXBTdGF0ZTogYm91bmRzXG4gICAgICA/IGZpdEJvdW5kc1VwZGF0ZXIoc3RhdGUubWFwU3RhdGUsIHtcbiAgICAgICAgICBwYXlsb2FkOiBib3VuZHNcbiAgICAgICAgfSlcbiAgICAgIDogc3RhdGUubWFwU3RhdGUsXG4gICAgdWlTdGF0ZToge1xuICAgICAgLi4udG9nZ2xlTW9kYWxVcGRhdGVyKHN0YXRlLnVpU3RhdGUsIHtwYXlsb2FkOiBudWxsfSksXG4gICAgICAuLi4ob3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgncmVhZE9ubHknKVxuICAgICAgICA/IHtyZWFkT25seTogb3B0aW9ucy5yZWFkT25seX1cbiAgICAgICAgOiB7fSlcbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIENvbWJpbmUgZGF0YSBhbmQgZnVsbCBjb25maWd1cmF0aW9uIHVwZGF0ZSBpbiBhIHNpbmdsZSBhY3Rpb25cbiAqIEBwYXJhbSBzdGF0ZVxuICogQHBhcmFtIGFjdGlvbiB7ZGF0YXNldHMsIG9wdGlvbnMsIGNvbmZpZ31cbiAqIEByZXR1cm5zIHN0YXRlXG4gKi9cbmV4cG9ydCBjb25zdCBhZGREYXRhVG9NYXBDb21wb3NlZCA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gIGNvbnN0IHtkYXRhc2V0cywgb3B0aW9ucywgY29uZmlnfSA9IGFjdGlvbi5wYXlsb2FkO1xuICBsZXQgcGFyc2VkQ29uZmlnID0gY29uZmlnO1xuICBpZiAoY29uZmlnICYmIGNvbmZpZy5jb25maWcgJiYgY29uZmlnLnZlcnNpb24pIHtcbiAgICAvLyBpZiBwYXNzZWQgaW4gc2F2ZWQgY29uZmlnXG4gICAgcGFyc2VkQ29uZmlnID0gS2VwbGVyR2xTY2hlbWEucGFyc2VTYXZlZENvbmZpZyhjb25maWcpO1xuICB9XG4gIC8vIFVwZGF0ZSB2aXNTdGF0ZSBzdG9yZVxuXG4gIHZhciBtZXJnZWRTdGF0ZSA9IHVwZGF0ZVZpc0RhdGFDb21wb3NlZChzdGF0ZSwge1xuICAgIGRhdGFzZXRzLFxuICAgIG9wdGlvbnMsXG4gICAgY29uZmlnOiBwYXJzZWRDb25maWcgJiYgcGFyc2VkQ29uZmlnLnZpc1N0YXRlXG4gIH0pO1xuXG4gIC8vIFVwZGF0ZSBtYXBTdGF0ZSBzdG9yZVxuICBtZXJnZWRTdGF0ZSA9IHtcbiAgICAuLi5tZXJnZWRTdGF0ZSxcbiAgICBtYXBTdGF0ZTogc3RhdGVNYXBDb25maWdVcGRhdGVyKG1lcmdlZFN0YXRlLm1hcFN0YXRlLCB7XG4gICAgICBwYXlsb2FkOiB7bWFwU3RhdGU6IHBhcnNlZENvbmZpZyAmJiBwYXJzZWRDb25maWcubWFwU3RhdGV9XG4gICAgfSlcbiAgfTtcblxuICAvLyBVcGRhdGUgbWFwU3R5bGUgc3RvcmVcbiAgbWVyZ2VkU3RhdGUgPSB7XG4gICAgLi4ubWVyZ2VkU3RhdGUsXG4gICAgbWFwU3R5bGU6IHN0eWxlTWFwQ29uZmlnVXBkYXRlcihtZXJnZWRTdGF0ZS5tYXBTdHlsZSwge1xuICAgICAgcGF5bG9hZDoge21hcFN0eWxlOiBwYXJzZWRDb25maWcgJiYgcGFyc2VkQ29uZmlnLm1hcFN0eWxlfVxuICAgIH0pXG4gIH07XG5cbiAgcmV0dXJuIG1lcmdlZFN0YXRlO1xufTtcblxuY29uc3QgY29tcG9zdGVkVXBkYXRlcnMgPSB7XG4gIFtBY3Rpb25UeXBlcy5VUERBVEVfVklTX0RBVEFdOiB1cGRhdGVWaXNEYXRhQ29tcG9zZWQsXG4gIFtBY3Rpb25UeXBlcy5BRERfREFUQV9UT19NQVBdOiBhZGREYXRhVG9NYXBDb21wb3NlZFxufTtcblxuZXhwb3J0IGRlZmF1bHQgY29tcG9zdGVkVXBkYXRlcnM7XG4iXX0=