UNPKG

kepler.gl

Version:

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

105 lines (101 loc) 17 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.getPropValueToMerger = getPropValueToMerger; exports.hasPropsToMerge = hasPropsToMerge; exports.isValidMerger = isValidMerger; exports.mergeStateFromMergers = mergeStateFromMergers; exports.resetStateToMergeProps = resetStateToMergeProps; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); var _tasks = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/node_modules/react-palm/tasks"); var _src = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/src/utils/src"); var _src2 = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/src/common-utils/src"); 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 function isValidMerger(merger) { return (0, _src.isObject)(merger) && typeof merger.merge === 'function' && (typeof merger.prop === 'string' || Array.isArray(merger.prop)); } /** * Call state updater, return the tasks created by the state update with withTask() */ function callFunctionGetTask(fn) { var before = (0, _tasks.getGlobalTaskQueue)(); var ret = fn(); var after = (0, _tasks.getGlobalTaskQueue)(); var diff = after.filter(function (t) { return !before.includes(t); }); return [ret, diff]; } function mergeStateFromMergers(state, initialState, mergers, postMergerPayload) { // const newDataIds = Object.keys(postMergerPayload.newDataEntries); var mergedState = state; // merge state with config to be merged var mergerQueue = (0, _toConsumableArray2["default"])(mergers); var _loop = function _loop() { var merger = mergerQueue.shift(); if (merger && isValidMerger(merger) && merger.toMergeProp && hasPropsToMerge(state, merger.toMergeProp)) { // put the rest of mergers and payload for postMergeUpdater in mergerActionPayload // and pass it to current merger, which (if async) knows to continue merging var mergerActionPayload = { mergers: mergerQueue, postMergerPayload: postMergerPayload }; // reset toMerge var toMerge = getPropValueToMerger(mergedState, merger.toMergeProp, merger.toMergeProp); mergedState = resetStateToMergeProps(mergedState, initialState, merger.toMergeProp); // call merger // eslint-disable-next-line no-loop-func var mergeFunc = function mergeFunc() { return merger.merge(mergedState, toMerge, false, mergerActionPayload); }; var _callFunctionGetTask = callFunctionGetTask(mergeFunc), _callFunctionGetTask2 = (0, _slicedToArray2["default"])(_callFunctionGetTask, 2), updatedState = _callFunctionGetTask2[0], newTasks = _callFunctionGetTask2[1]; mergedState = updatedState; // check if asyncTask was created (time consuming tasks) if (newTasks.length && merger.waitToFinish) { // skip rest, the async merger will call applyMergerUpdater() to continue return { v: { mergedState: mergedState, allMerged: false } }; } } }, _ret; while (mergerQueue.length) { _ret = _loop(); if (_ret) return _ret.v; } // we merged all mergers in the queue, and we can call post merger now return { mergedState: mergedState, allMerged: true }; } function hasPropsToMerge(state, mergerProps) { return Array.isArray(mergerProps) ? Boolean(mergerProps.some(function (p) { return Object.prototype.hasOwnProperty.call(state, p); })) : typeof mergerProps === 'string' && Object.prototype.hasOwnProperty.call(state, mergerProps); } function getPropValueToMerger(state, mergerProps, toMergeProps) { return Array.isArray(mergerProps) && Array.isArray(toMergeProps) ? mergerProps.reduce(function (accu, p, i) { if (!toMergeProps) return accu; return _objectSpread(_objectSpread({}, accu), {}, (0, _defineProperty2["default"])({}, toMergeProps[i], state[p])); }, {}) : state[mergerProps]; } function resetStateToMergeProps(state, initialState, mergerProps) { return (0, _src2.toArray)(mergerProps).reduce(function (accu, prop) { return _objectSpread(_objectSpread({}, accu), {}, (0, _defineProperty2["default"])({}, prop, initialState[prop])); }, state); } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdGFza3MiLCJyZXF1aXJlIiwiX3NyYyIsIl9zcmMyIiwib3duS2V5cyIsImUiLCJyIiwidCIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJpc1ZhbGlkTWVyZ2VyIiwibWVyZ2VyIiwiaXNPYmplY3QiLCJtZXJnZSIsInByb3AiLCJBcnJheSIsImlzQXJyYXkiLCJjYWxsRnVuY3Rpb25HZXRUYXNrIiwiZm4iLCJiZWZvcmUiLCJnZXRHbG9iYWxUYXNrUXVldWUiLCJyZXQiLCJhZnRlciIsImRpZmYiLCJpbmNsdWRlcyIsIm1lcmdlU3RhdGVGcm9tTWVyZ2VycyIsInN0YXRlIiwiaW5pdGlhbFN0YXRlIiwibWVyZ2VycyIsInBvc3RNZXJnZXJQYXlsb2FkIiwibWVyZ2VkU3RhdGUiLCJtZXJnZXJRdWV1ZSIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJfbG9vcCIsInNoaWZ0IiwidG9NZXJnZVByb3AiLCJoYXNQcm9wc1RvTWVyZ2UiLCJtZXJnZXJBY3Rpb25QYXlsb2FkIiwidG9NZXJnZSIsImdldFByb3BWYWx1ZVRvTWVyZ2VyIiwicmVzZXRTdGF0ZVRvTWVyZ2VQcm9wcyIsIm1lcmdlRnVuYyIsIl9jYWxsRnVuY3Rpb25HZXRUYXNrIiwiX2NhbGxGdW5jdGlvbkdldFRhc2syIiwiX3NsaWNlZFRvQXJyYXkyIiwidXBkYXRlZFN0YXRlIiwibmV3VGFza3MiLCJ3YWl0VG9GaW5pc2giLCJ2IiwiYWxsTWVyZ2VkIiwiX3JldCIsIm1lcmdlclByb3BzIiwiQm9vbGVhbiIsInNvbWUiLCJwIiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwidG9NZXJnZVByb3BzIiwicmVkdWNlIiwiYWNjdSIsImkiLCJ0b0FycmF5Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JlZHVjZXJzL3NyYy9tZXJnZXItaGFuZGxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge2dldEdsb2JhbFRhc2tRdWV1ZX0gZnJvbSAncmVhY3QtcGFsbS90YXNrcyc7XG5pbXBvcnQge2lzT2JqZWN0fSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCB7dG9BcnJheX0gZnJvbSAnQGtlcGxlci5nbC9jb21tb24tdXRpbHMnO1xuaW1wb3J0IHtWYWx1ZU9mfSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7VmlzU3RhdGUsIE1lcmdlciwgUG9zdE1lcmdlclBheWxvYWR9IGZyb20gJ0BrZXBsZXIuZ2wvc2NoZW1hcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkTWVyZ2VyKG1lcmdlcjogTWVyZ2VyPGFueT4pOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBpc09iamVjdChtZXJnZXIpICYmXG4gICAgdHlwZW9mIG1lcmdlci5tZXJnZSA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICh0eXBlb2YgbWVyZ2VyLnByb3AgPT09ICdzdHJpbmcnIHx8IEFycmF5LmlzQXJyYXkobWVyZ2VyLnByb3ApKVxuICApO1xufVxuXG4vKipcbiAqIENhbGwgc3RhdGUgdXBkYXRlciwgcmV0dXJuIHRoZSB0YXNrcyBjcmVhdGVkIGJ5IHRoZSBzdGF0ZSB1cGRhdGUgd2l0aCB3aXRoVGFzaygpXG4gKi9cbmZ1bmN0aW9uIGNhbGxGdW5jdGlvbkdldFRhc2soZm46ICgpID0+IGFueSk6IFthbnksIGFueV0ge1xuICBjb25zdCBiZWZvcmUgPSBnZXRHbG9iYWxUYXNrUXVldWUoKTtcbiAgY29uc3QgcmV0ID0gZm4oKTtcbiAgY29uc3QgYWZ0ZXIgPSBnZXRHbG9iYWxUYXNrUXVldWUoKTtcbiAgY29uc3QgZGlmZiA9IGFmdGVyLmZpbHRlcih0ID0+ICFiZWZvcmUuaW5jbHVkZXModCkpO1xuICByZXR1cm4gW3JldCwgZGlmZl07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZVN0YXRlRnJvbU1lcmdlcnM8U3RhdGUgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTdGF0ZSxcbiAgaW5pdGlhbFN0YXRlOiBTdGF0ZSxcbiAgbWVyZ2VyczogTWVyZ2VyPFN0YXRlPltdLFxuICBwb3N0TWVyZ2VyUGF5bG9hZDogUG9zdE1lcmdlclBheWxvYWRcbik6IHtcbiAgbWVyZ2VkU3RhdGU6IFN0YXRlO1xuICBhbGxNZXJnZWQ6IGJvb2xlYW47XG59IHtcbiAgLy8gY29uc3QgbmV3RGF0YUlkcyA9IE9iamVjdC5rZXlzKHBvc3RNZXJnZXJQYXlsb2FkLm5ld0RhdGFFbnRyaWVzKTtcbiAgbGV0IG1lcmdlZFN0YXRlID0gc3RhdGU7XG4gIC8vIG1lcmdlIHN0YXRlIHdpdGggY29uZmlnIHRvIGJlIG1lcmdlZFxuICBjb25zdCBtZXJnZXJRdWV1ZSA9IFsuLi5tZXJnZXJzXTtcblxuICB3aGlsZSAobWVyZ2VyUXVldWUubGVuZ3RoKSB7XG4gICAgY29uc3QgbWVyZ2VyID0gbWVyZ2VyUXVldWUuc2hpZnQoKTtcblxuICAgIGlmIChcbiAgICAgIG1lcmdlciAmJlxuICAgICAgaXNWYWxpZE1lcmdlcihtZXJnZXIpICYmXG4gICAgICBtZXJnZXIudG9NZXJnZVByb3AgJiZcbiAgICAgIGhhc1Byb3BzVG9NZXJnZShzdGF0ZSwgbWVyZ2VyLnRvTWVyZ2VQcm9wKVxuICAgICkge1xuICAgICAgLy8gcHV0IHRoZSByZXN0IG9mIG1lcmdlcnMgYW5kIHBheWxvYWQgZm9yIHBvc3RNZXJnZVVwZGF0ZXIgaW4gbWVyZ2VyQWN0aW9uUGF5bG9hZFxuICAgICAgLy8gYW5kIHBhc3MgaXQgdG8gY3VycmVudCBtZXJnZXIsIHdoaWNoIChpZiBhc3luYykga25vd3MgdG8gY29udGludWUgbWVyZ2luZ1xuICAgICAgY29uc3QgbWVyZ2VyQWN0aW9uUGF5bG9hZCA9IHtcbiAgICAgICAgbWVyZ2VyczogbWVyZ2VyUXVldWUsXG4gICAgICAgIHBvc3RNZXJnZXJQYXlsb2FkXG4gICAgICB9O1xuICAgICAgLy8gcmVzZXQgdG9NZXJnZVxuICAgICAgY29uc3QgdG9NZXJnZSA9IGdldFByb3BWYWx1ZVRvTWVyZ2VyKG1lcmdlZFN0YXRlLCBtZXJnZXIudG9NZXJnZVByb3AsIG1lcmdlci50b01lcmdlUHJvcCk7XG5cbiAgICAgIG1lcmdlZFN0YXRlID0gcmVzZXRTdGF0ZVRvTWVyZ2VQcm9wcyhtZXJnZWRTdGF0ZSwgaW5pdGlhbFN0YXRlLCBtZXJnZXIudG9NZXJnZVByb3ApO1xuICAgICAgLy8gY2FsbCBtZXJnZXJcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sb29wLWZ1bmNcbiAgICAgIGNvbnN0IG1lcmdlRnVuYyA9ICgpID0+IG1lcmdlci5tZXJnZShtZXJnZWRTdGF0ZSwgdG9NZXJnZSwgZmFsc2UsIG1lcmdlckFjdGlvblBheWxvYWQpO1xuICAgICAgY29uc3QgW3VwZGF0ZWRTdGF0ZSwgbmV3VGFza3NdID0gY2FsbEZ1bmN0aW9uR2V0VGFzayhtZXJnZUZ1bmMpO1xuXG4gICAgICBtZXJnZWRTdGF0ZSA9IHVwZGF0ZWRTdGF0ZTtcblxuICAgICAgLy8gY2hlY2sgaWYgYXN5bmNUYXNrIHdhcyBjcmVhdGVkICh0aW1lIGNvbnN1bWluZyB0YXNrcylcbiAgICAgIGlmIChuZXdUYXNrcy5sZW5ndGggJiYgbWVyZ2VyLndhaXRUb0ZpbmlzaCkge1xuICAgICAgICAvLyBza2lwIHJlc3QsIHRoZSBhc3luYyBtZXJnZXIgd2lsbCBjYWxsIGFwcGx5TWVyZ2VyVXBkYXRlcigpIHRvIGNvbnRpbnVlXG4gICAgICAgIHJldHVybiB7bWVyZ2VkU3RhdGUsIGFsbE1lcmdlZDogZmFsc2V9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIHdlIG1lcmdlZCBhbGwgbWVyZ2VycyBpbiB0aGUgcXVldWUsIGFuZCB3ZSBjYW4gY2FsbCBwb3N0IG1lcmdlciBub3dcbiAgcmV0dXJuIHttZXJnZWRTdGF0ZSwgYWxsTWVyZ2VkOiB0cnVlfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1Byb3BzVG9NZXJnZTxTdGF0ZSBleHRlbmRzIG9iamVjdD4oXG4gIHN0YXRlOiBTdGF0ZSxcbiAgbWVyZ2VyUHJvcHM/OiBzdHJpbmcgfCBzdHJpbmdbXVxuKTogYm9vbGVhbiB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KG1lcmdlclByb3BzKVxuICAgID8gQm9vbGVhbihtZXJnZXJQcm9wcy5zb21lKHAgPT4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHN0YXRlLCBwKSkpXG4gICAgOiB0eXBlb2YgbWVyZ2VyUHJvcHMgPT09ICdzdHJpbmcnICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzdGF0ZSwgbWVyZ2VyUHJvcHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHJvcFZhbHVlVG9NZXJnZXI8U3RhdGUgZXh0ZW5kcyBvYmplY3Q+KFxuICBzdGF0ZTogU3RhdGUsXG4gIG1lcmdlclByb3BzPzogc3RyaW5nIHwgc3RyaW5nW10sXG4gIHRvTWVyZ2VQcm9wcz86IHN0cmluZyB8IHN0cmluZ1tdXG4pOiBQYXJ0aWFsPFN0YXRlPiB8IFZhbHVlT2Y8U3RhdGU+IHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkobWVyZ2VyUHJvcHMpICYmIEFycmF5LmlzQXJyYXkodG9NZXJnZVByb3BzKVxuICAgID8gbWVyZ2VyUHJvcHMucmVkdWNlKChhY2N1LCBwLCBpKSA9PiB7XG4gICAgICAgIGlmICghdG9NZXJnZVByb3BzKSByZXR1cm4gYWNjdTtcbiAgICAgICAgcmV0dXJuIHsuLi5hY2N1LCBbdG9NZXJnZVByb3BzW2ldXTogc3RhdGVbcF19O1xuICAgICAgfSwge30pXG4gICAgOiBzdGF0ZVttZXJnZXJQcm9wcyBhcyBzdHJpbmddO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzZXRTdGF0ZVRvTWVyZ2VQcm9wczxTdGF0ZSBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFN0YXRlLFxuICBpbml0aWFsU3RhdGU6IFN0YXRlLFxuICBtZXJnZXJQcm9wczogc3RyaW5nIHwgc3RyaW5nW11cbikge1xuICByZXR1cm4gdG9BcnJheShtZXJnZXJQcm9wcykucmVkdWNlKFxuICAgIChhY2N1LCBwcm9wKSA9PiAoe1xuICAgICAgLi4uYWNjdSxcbiAgICAgIFtwcm9wXTogaW5pdGlhbFN0YXRlW3Byb3BdXG4gICAgfSksXG4gICAgc3RhdGVcbiAgKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxNQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxJQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxLQUFBLEdBQUFGLE9BQUE7QUFBZ0QsU0FBQUcsUUFBQUMsQ0FBQSxFQUFBQyxDQUFBLFFBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxJQUFBLENBQUFKLENBQUEsT0FBQUcsTUFBQSxDQUFBRSxxQkFBQSxRQUFBQyxDQUFBLEdBQUFILE1BQUEsQ0FBQUUscUJBQUEsQ0FBQUwsQ0FBQSxHQUFBQyxDQUFBLEtBQUFLLENBQUEsR0FBQUEsQ0FBQSxDQUFBQyxNQUFBLFdBQUFOLENBQUEsV0FBQUUsTUFBQSxDQUFBSyx3QkFBQSxDQUFBUixDQUFBLEVBQUFDLENBQUEsRUFBQVEsVUFBQSxPQUFBUCxDQUFBLENBQUFRLElBQUEsQ0FBQUMsS0FBQSxDQUFBVCxDQUFBLEVBQUFJLENBQUEsWUFBQUosQ0FBQTtBQUFBLFNBQUFVLGNBQUFaLENBQUEsYUFBQUMsQ0FBQSxNQUFBQSxDQUFBLEdBQUFZLFNBQUEsQ0FBQUMsTUFBQSxFQUFBYixDQUFBLFVBQUFDLENBQUEsV0FBQVcsU0FBQSxDQUFB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