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
JavaScript
;
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=