UNPKG

kepler.gl.geoiq

Version:

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

134 lines (99 loc) 17.8 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.provideInitialState = provideInitialState; exports["default"] = void 0; var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _reduxActions = require("redux-actions"); var _actionWrapper = require("../actions/action-wrapper"); var _core = require("./core"); var _actionTypes = _interopRequireDefault(require("../constants/action-types")); var _actions = require("../actions/actions"); 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; } /* * voyager reducer wrapper, * wraps multiple voyager state in one voyager */ // INITIAL_STATE var initialCoreState = {}; function provideInitialState(initialState) { var coreReducer = (0, _core.coreReducerFactory)(initialState); var handleRegisterEntry = function handleRegisterEntry(state, _ref) { var _ref$payload = _ref.payload, id = _ref$payload.id, mint = _ref$payload.mint, mapboxApiAccessToken = _ref$payload.mapboxApiAccessToken; return _objectSpread({}, state, (0, _defineProperty2["default"])({}, id, state[id] && mint === false ? state[id] : _objectSpread({}, coreReducer(undefined, (0, _actions.keplerGlInit)({ mapboxApiAccessToken: mapboxApiAccessToken }))))); }; var handleDeleteEntry = function handleDeleteEntry(state, _ref2) { var id = _ref2.payload; return Object.keys(state).reduce(function (accu, curr) { return _objectSpread({}, accu, {}, curr === id ? {} : (0, _defineProperty2["default"])({}, curr, state[curr])); }, {}); }; var handleRenameEntry = function handleRenameEntry(state, _ref4) { var _ref4$payload = _ref4.payload, oldId = _ref4$payload.oldId, newId = _ref4$payload.newId; return Object.keys(state).reduce(function (accu, curr) { return _objectSpread({}, accu, {}, (0, _defineProperty2["default"])({}, curr === oldId ? newId : curr, state[curr])); }, {}); }; return function () { var _handleActions; var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialCoreState; var action = arguments.length > 1 ? arguments[1] : undefined; // update child states Object.keys(state).forEach(function (id) { var updateItemState = coreReducer(state[id], (0, _actionWrapper.actionFor)(id, action)); state = (0, _actionWrapper.updateProperty)(state, id, updateItemState); }); // perform additional state reducing (e.g. switch action.type etc...) return (0, _reduxActions.handleActions)((_handleActions = {}, (0, _defineProperty2["default"])(_handleActions, _actionTypes["default"].REGISTER_ENTRY, handleRegisterEntry), (0, _defineProperty2["default"])(_handleActions, _actionTypes["default"].DELETE_ENTRY, handleDeleteEntry), (0, _defineProperty2["default"])(_handleActions, _actionTypes["default"].RENAME_ENTRY, handleRenameEntry), _handleActions), initialCoreState)(state, action); }; } var keplerGlReducer = provideInitialState(); function mergeInitialState() { var saved = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var provided = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var keys = ['mapState', 'mapStyle', 'visState', 'uiState']; // shallow merge each reducer return keys.reduce(function (accu, key) { return _objectSpread({}, accu, {}, saved[key] && provided[key] ? (0, _defineProperty2["default"])({}, key, _objectSpread({}, saved[key], {}, provided[key])) : (0, _defineProperty2["default"])({}, key, saved[key] || provided[key] || {})); }, {}); } function decorate(target) { var savedInitialState = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var targetInitialState = savedInitialState; // plugin to core reducer target.plugin = function plugin(customReducer) { var _this = this; if ((0, _typeof2["default"])(customReducer) === 'object') { // if only provided a reducerMap, wrap it in a reducer customReducer = (0, _reduxActions.handleActions)(customReducer, {}); } // use 'function' keyword to enable 'this' return decorate(function () { var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var action = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var nextState = _this(state, action); // for each entry in the staten Object.keys(nextState).forEach(function (id) { // update child states nextState = (0, _actionWrapper.updateProperty)(nextState, id, customReducer(nextState[id], (0, _actionWrapper.actionFor)(id, action))); }); return nextState; }); }; // pass in initialState for reducer slices // e.g. initialState = {uiState: {currentModal : null}} target.initialState = function initialState(iniSt) { var merged = mergeInitialState(targetInitialState, iniSt); var targetReducer = provideInitialState(merged); return decorate(targetReducer, merged); }; return target; } var _default = decorate(keplerGlReducer); exports["default"] = _default; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZWR1Y2Vycy9yb290LmpzIl0sIm5hbWVzIjpbImluaXRpYWxDb3JlU3RhdGUiLCJwcm92aWRlSW5pdGlhbFN0YXRlIiwiaW5pdGlhbFN0YXRlIiwiY29yZVJlZHVjZXIiLCJoYW5kbGVSZWdpc3RlckVudHJ5Iiwic3RhdGUiLCJwYXlsb2FkIiwiaWQiLCJtaW50IiwibWFwYm94QXBpQWNjZXNzVG9rZW4iLCJ1bmRlZmluZWQiLCJoYW5kbGVEZWxldGVFbnRyeSIsIk9iamVjdCIsImtleXMiLCJyZWR1Y2UiLCJhY2N1IiwiY3VyciIsImhhbmRsZVJlbmFtZUVudHJ5Iiwib2xkSWQiLCJuZXdJZCIsImFjdGlvbiIsImZvckVhY2giLCJ1cGRhdGVJdGVtU3RhdGUiLCJBY3Rpb25UeXBlcyIsIlJFR0lTVEVSX0VOVFJZIiwiREVMRVRFX0VOVFJZIiwiUkVOQU1FX0VOVFJZIiwia2VwbGVyR2xSZWR1Y2VyIiwibWVyZ2VJbml0aWFsU3RhdGUiLCJzYXZlZCIsInByb3ZpZGVkIiwia2V5IiwiZGVjb3JhdGUiLCJ0YXJnZXQiLCJzYXZlZEluaXRpYWxTdGF0ZSIsInRhcmdldEluaXRpYWxTdGF0ZSIsInBsdWdpbiIsImN1c3RvbVJlZHVjZXIiLCJuZXh0U3RhdGUiLCJpbmlTdCIsIm1lcmdlZCIsInRhcmdldFJlZHVjZXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBb0JBOztBQUVBOztBQUNBOztBQUNBOztBQUVBOzs7Ozs7QUFDQTs7OztBQUtBO0FBQ0EsSUFBTUEsZ0JBQWdCLEdBQUcsRUFBekI7O0FBRU8sU0FBU0MsbUJBQVQsQ0FBNkJDLFlBQTdCLEVBQTJDO0FBQ2hELE1BQU1DLFdBQVcsR0FBRyw4QkFBbUJELFlBQW5CLENBQXBCOztBQUVBLE1BQU1FLG1CQUFtQixHQUFHLFNBQXRCQSxtQkFBc0IsQ0FBQ0MsS0FBRDtBQUFBLDRCQUFTQyxPQUFUO0FBQUEsUUFBbUJDLEVBQW5CLGdCQUFtQkEsRUFBbkI7QUFBQSxRQUF1QkMs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QUFTQSxZQUFULENBQXNCcUMsS0FBdEIsRUFBNkI7QUFDakQsUUFBTUMsTUFBTSxHQUFHWixpQkFBaUIsQ0FBQ08sa0JBQUQsRUFBcUJJLEtBQXJCLENBQWhDO0FBQ0EsUUFBTUUsYUFBYSxHQUFHeEMsbUJBQW1CLENBQUN1QyxNQUFELENBQXpDO0FBRUEsV0FBT1IsUUFBUSxDQUFDUyxhQUFELEVBQWdCRCxNQUFoQixDQUFmO0FBQ0QsR0FMRDs7QUFPQSxTQUFPUCxNQUFQO0FBQ0Q7O2VBRWNELFFBQVEsQ0FBQ0wsZUFBRCxDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDE5IFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IHtoYW5kbGVBY3Rpb25zfSBmcm9tICdyZWR1eC1hY3Rpb25zJztcblxuaW1wb3J0IHthY3Rpb25Gb3IsIHVwZGF0ZVByb3BlcnR5fSBmcm9tICcuLi9hY3Rpb25zL2FjdGlvbi13cmFwcGVyJztcbmltcG9ydCB7Y29yZVJlZHVjZXJGYWN0b3J5fSBmcm9tICcuL2NvcmUnO1xuaW1wb3J0IEFjdGlvblR5cGVzIGZyb20gJ2NvbnN0YW50cy9hY3Rpb24tdHlwZXMnO1xuXG5pbXBvcnQge2tlcGxlckdsSW5pdH0gZnJvbSAnLi4vYWN0aW9ucy9hY3Rpb25zJztcbi8qXG4gKiB2b3lhZ2VyIHJlZHVjZXIgd3JhcHBlcixcbiAqIHdyYXBzIG11bHRpcGxlIHZveWFnZXIgc3RhdGUgaW4gb25lIHZveWFnZXJcbiAqL1xuXG4vLyBJTklUSUFMX1NUQVRFXG5jb25zdCBpbml0aWFsQ29yZVN0YXRlID0ge307XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlSW5pdGlhbFN0YXRlKGluaXRpYWxTdGF0ZSkge1xuICBjb25zdCBjb3JlUmVkdWNlciA9IGNvcmVSZWR1Y2VyRmFjdG9yeShpbml0aWFsU3RhdGUpO1xuXG4gIGNvbnN0IGhhbmRsZVJlZ2lzdGVyRW50cnkgPSAoc3RhdGUsIHtwYXlsb2FkOiB7aWQsIG1pbnQsIG1hcGJveEFwaUFjY2Vzc1Rva2VufX0pID0+ICh7XG4gICAgLy8gcmVnaXN0ZXIgYSBuZXcgZW50cnkgdG8gdm95YWdlciByZWR1Y2VyXG4gICAgLy8gYnkgZGVmYXVsdCwgYWx3YXlzIGNyZWF0ZSBhIG1pbnQgc3RhdGUgZXZlbiBpZiB0aGUgc2FtZSBpZCBhbHJlYWR5IGV4aXN0XG4gICAgLy8gaWYgc3RhdGUuaWQgZXhpc3QgYW5kIG1pbnQ9ZmFsc2UsIGtlZXAgdGhlIGV4aXN0aW5nIHN0YXRlXG4gICAgLi4uc3RhdGUsXG4gICAgW2lkXTogc3RhdGVbaWRdICYmIG1pbnQgPT09IGZhbHNlID8gc3RhdGVbaWRdIDoge1xuICAgICAgLi4uY29yZVJlZHVjZXIodW5kZWZpbmVkLCBrZXBsZXJHbEluaXQoe21hcGJveEFwaUFjY2Vzc1Rva2VufSkpXG4gICAgfVxuICB9KTtcblxuICBjb25zdCBoYW5kbGVEZWxldGVFbnRyeSA9IChzdGF0ZSwge3BheWxvYWQ6IGlkfSkgPT5cbiAgICBPYmplY3Qua2V5cyhzdGF0ZSkucmVkdWNlKFxuICAgICAgKGFjY3UsIGN1cnIpID0+ICh7XG4gICAgICAgIC4uLmFjY3UsXG4gICAgICAgIC4uLihjdXJyID09PSBpZCA/IHt9IDoge1tjdXJyXTogc3RhdGVbY3Vycl19KVxuICAgICAgfSksXG4gICAgICB7fVxuICAgICk7XG5cbiAgY29uc3QgaGFuZGxlUmVuYW1lRW50cnkgPSAoc3RhdGUsIHtwYXlsb2FkOiB7b2xkSWQsIG5ld0lkfX0pID0+XG4gICAgT2JqZWN0LmtleXMoc3RhdGUpLnJlZHVjZShcbiAgICAgIChhY2N1LCBjdXJyKSA9PiAoe1xuICAgICAgICAuLi5hY2N1LFxuICAgICAgICAuLi57W2N1cnIgPT09IG9sZElkID8gbmV3SWQgOiBjdXJyXTogc3RhdGVbY3Vycl19XG4gICAgICB9KSxcbiAgICAgIHt9XG4gICAgKTtcblxuICByZXR1cm4gKHN0YXRlID0gaW5pdGlhbENvcmVTdGF0ZSwgYWN0aW9uKSA9PiB7XG4gICAgLy8gdXBkYXRlIGNoaWxkIHN0YXRlc1xuICAgIE9iamVjdC5rZXlzKHN0YXRlKS5mb3JFYWNoKGlkID0+IHtcbiAgICAgIGNvbnN0IHVwZGF0ZUl0ZW1TdGF0ZSA9IGNvcmVSZWR1Y2VyKHN0YXRlW2lkXSwgYWN0aW9uRm9yKGlkLCBhY3Rpb24pKTtcbiAgICAgIHN0YXRlID0gdXBkYXRlUHJvcGVydHkoc3RhdGUsIGlkLCB1cGRhdGVJdGVtU3RhdGUpO1xuICAgIH0pO1xuXG4gICAgLy8gcGVyZm9ybSBhZGRpdGlvbmFsIHN0YXRlIHJlZHVjaW5nIChlLmcuIHN3aXRjaCBhY3Rpb24udHlwZSBldGMuLi4pXG4gICAgcmV0dXJuIGhhbmRsZUFjdGlvbnMoXG4gICAgICB7XG4gICAgICAgIFtBY3Rpb25UeXBlcy5SRUdJU1RFUl9FTlRSWV06IGhhbmRsZVJlZ2lzdGVyRW50cnksXG4gICAgICAgIFtBY3Rpb25UeXBlcy5ERUxFVEVfRU5UUlldOiBoYW5kbGVEZWxldGVFbnRyeSxcbiAgICAgICAgW0FjdGlvblR5cGVzLlJFTkFNRV9FTlRSWV06IGhhbmRsZVJlbmFtZUVudHJ5XG4gICAgICB9LFxuICAgICAgaW5pdGlhbENvcmVTdGF0ZVxuICAgICkoc3RhdGUsIGFjdGlvbik7XG4gIH07XG59XG5cbmNvbnN0IGtlcGxlckdsUmVkdWNlciA9IHByb3ZpZGVJbml0aWFsU3RhdGUoKTtcblxuZnVuY3Rpb24gbWVyZ2VJbml0aWFsU3RhdGUoc2F2ZWQgPSB7fSwgcHJvdmlkZWQgPSB7fSkge1xuICBjb25zdCBrZXlzID0gWydtYXBTdGF0ZScsICdtYXBTdHlsZScsICd2aXNTdGF0ZScsICd1aVN0YXRlJ107XG5cbiAgLy8gc2hhbGxvdyBtZXJnZSBlYWNoIHJlZHVjZXJcbiAgcmV0dXJuIGtleXMucmVkdWNlKChhY2N1LCBrZXkpID0+ICh7XG4gICAgLi4uYWNjdSxcbiAgICAuLi4oc2F2ZWRba2V5XSAmJiBwcm92aWRlZFtrZXldID9cbiAgICAgICAge1trZXldOiB7Li4uc2F2ZWRba2V5XSwgLi4ucHJvdmlkZWRba2V5XX19IDpcbiAgICAgICAge1trZXldOiBzYXZlZFtrZXldIHx8IHByb3ZpZGVkW2tleV0gfHwge319KVxuICB9KSwge30pO1xufVxuXG5mdW5jdGlvbiBkZWNvcmF0ZSh0YXJnZXQsIHNhdmVkSW5pdGlhbFN0YXRlID0ge30pIHtcbiAgY29uc3QgdGFyZ2V0SW5pdGlhbFN0YXRlID0gc2F2ZWRJbml0aWFsU3RhdGU7XG5cbiAgLy8gcGx1Z2luIHRvIGNvcmUgcmVkdWNlclxuICB0YXJnZXQucGx1Z2luID0gZnVuY3Rpb24gcGx1Z2luKGN1c3RvbVJlZHVjZXIpIHtcbiAgICBpZiAodHlwZW9mIGN1c3RvbVJlZHVjZXIgPT09ICdvYmplY3QnKSB7XG4gICAgICAvLyBpZiBvbmx5IHByb3ZpZGVkIGEgcmVkdWNlck1hcCwgd3JhcCBpdCBpbiBhIHJlZHVjZXJcbiAgICAgIGN1c3RvbVJlZHVjZXIgPSBoYW5kbGVBY3Rpb25zKGN1c3RvbVJlZHVjZXIsIHt9KTtcbiAgICB9XG5cbiAgICAvLyB1c2UgJ2Z1bmN0aW9uJyBrZXl3b3JkIHRvIGVuYWJsZSAndGhpcydcbiAgICByZXR1cm4gZGVjb3JhdGUoKHN0YXRlID0ge30sIGFjdGlvbiA9IHt9KSA9PiB7XG4gICAgICBsZXQgbmV4dFN0YXRlID0gdGhpcyhzdGF0ZSwgYWN0aW9uKTtcblxuICAgICAgLy8gZm9yIGVhY2ggZW50cnkgaW4gdGhlIHN0YXRlblxuICAgICAgT2JqZWN0LmtleXMobmV4dFN0YXRlKS5mb3JFYWNoKGlkID0+IHtcbiAgICAgICAgLy8gdXBkYXRlIGNoaWxkIHN0YXRlc1xuICAgICAgICBuZXh0U3RhdGUgPSB1cGRhdGVQcm9wZXJ0eShcbiAgICAgICAgICBuZXh0U3RhdGUsXG4gICAgICAgICAgaWQsXG4gICAgICAgICAgY3VzdG9tUmVkdWNlcihuZXh0U3RhdGVbaWRdLCBhY3Rpb25Gb3IoaWQsIGFjdGlvbikpXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIG5leHRTdGF0ZTtcbiAgICB9KTtcbiAgfTtcblxuICAvLyBwYXNzIGluIGluaXRpYWxTdGF0ZSBmb3IgcmVkdWNlciBzbGljZXNcbiAgLy8gZS5nLiBpbml0aWFsU3RhdGUgPSB7dWlTdGF0ZToge2N1cnJlbnRNb2RhbCA6IG51bGx9fVxuICB0YXJnZXQuaW5pdGlhbFN0YXRlID0gZnVuY3Rpb24gaW5pdGlhbFN0YXRlKGluaVN0KSB7XG4gICAgY29uc3QgbWVyZ2VkID0gbWVyZ2VJbml0aWFsU3RhdGUodGFyZ2V0SW5pdGlhbFN0YXRlLCBpbmlTdCk7XG4gICAgY29uc3QgdGFyZ2V0UmVkdWNlciA9IHByb3ZpZGVJbml0aWFsU3RhdGUobWVyZ2VkKTtcblxuICAgIHJldHVybiBkZWNvcmF0ZSh0YXJnZXRSZWR1Y2VyLCBtZXJnZWQpO1xuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZGVjb3JhdGUoa2VwbGVyR2xSZWR1Y2VyKTtcbiJdfQ==