UNPKG

kepler.gl.geoiq

Version:

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

125 lines (94 loc) 13.7 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.errorMsg = void 0; exports.injector = injector; exports.withState = withState; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties")); var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); var _react = _interopRequireDefault(require("react")); var _reactRedux = require("react-redux"); var _redux = require("redux"); var _propTypes = _interopRequireDefault(require("prop-types")); var _window = require("global/window"); var _excluded = ["state"]; 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; } var MissingComp = function MissingComp() { return (/*#__PURE__*/_react["default"].createElement("div", null) ); }; var errorMsg = exports.errorMsg = { noDep: function noDep(fac, parent) { return "".concat(fac.name, " is required as a dependency of ").concat(parent.name, ", ") + "but is not provided to injectComponents. It will not be rendered"; }, notFunc: '`factory and its replacement should be a function`' }; function injector() { var map = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Map(); var cache = new Map(); // map<factory, factory -> ?> var get = function get(fac, parent) { var factory = map.get(fac); // factory is not injected if (!factory) { _window.console.error(errorMsg.noDep(fac, parent)); return MissingComp; } var instances = cache.get(factory) || factory.apply(void 0, (0, _toConsumableArray2["default"])(factory.deps ? factory.deps.map(function (dep) { return get(dep, factory); }) : [])); cache.set(fac, instances); return instances; }; // if you have two functions that happen to have the exactly same text // it will be override: 2018-02-05 return { provide: function provide(factory, replacement) { if (typeof factory !== 'function') { _window.console.error('Error injecting factory: ', factory); _window.console.error(errorMsg.notFunc); return injector(map); } else if (typeof replacement !== 'function') { _window.console.error('Error injecting replacement for: ', factory); _window.console.error(errorMsg.notFunc); return injector(map); } return injector(new Map(map).set(factory, replacement)); }, get: get }; } var identity = function identity(state) { return state; }; // Helper to add reducer state to custom component function withState(lenses) { var mapStateToProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : identity; var actions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; return function (Component) { var WrappedComponent = function WrappedComponent(_ref, _ref2) { var state = _ref.state, props = (0, _objectWithoutProperties2["default"])(_ref, _excluded); var selector = _ref2.selector, id = _ref2.id; return (/*#__PURE__*/_react["default"].createElement(Component, lenses.reduce(function (totalState, lens) { return _objectSpread(_objectSpread({}, totalState), lens(selector(state))); }, props)) ); }; WrappedComponent.contextTypes = { selector: _propTypes["default"].func, id: _propTypes["default"].string }; return (0, _reactRedux.connect)(function (state) { return _objectSpread(_objectSpread({}, mapStateToProps(state)), {}, { state: state }); }, function (dispatch) { return Object.keys(actions).reduce(function (accu, key) { return _objectSpread(_objectSpread({}, accu), {}, (0, _defineProperty2["default"])({}, key, (0, _redux.bindActionCreators)(actions[key], dispatch))); }, {}); })(WrappedComponent); }; } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL2luamVjdG9yLmpzIl0sIm5hbWVzIjpbIk1pc3NpbmdDb21wIiwiZXJyb3JNc2ciLCJub0RlcCIsImZhYyIsInBhcmVudCIsIm5hbWUiLCJub3RGdW5jIiwiaW5qZWN0b3IiLCJtYXAiLCJNYXAiLCJjYWNoZSIsImdldCIsImZhY3RvcnkiLCJDb25zb2xlIiwiZXJyb3IiLCJpbnN0YW5jZXMiLCJkZXBzIiwiZGVwIiwic2V0IiwicHJvdmlkZSIsInJlcGxhY2VtZW50IiwiaWRlbnRpdHkiLCJzdGF0ZSIsIndpdGhTdGF0ZSIsImxlbnNlcyIsIm1hcFN0YXRlVG9Qcm9wcyIsImFjdGlvbnMiLCJDb21wb25lbnQiLCJXcmFwcGVkQ29tcG9uZW50IiwicHJvcHMiLCJzZWxlY3RvciIsImlkIiwicmVkdWNlIiwidG90YWxTdGF0ZSIsImxlbnMiLCJjb250ZXh0VHlwZXMiLCJQcm9wVHlwZXMiLCJmdW5jIiwic3RyaW5nIiwiZGlzcGF0Y2giLCJPYmplY3QiLCJrZXlzIiwiYWNjdSIsImtleSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvQkE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7O0FBRUEsSUFBTUEsV0FBVyxHQUFHLFNBQWRBLFdBQWM7QUFBQSx1QkFBTTtBQUFOO0FBQUEsQ0FBcEI7O0FBQ08sSUFBTUMsUUFBUSxzQkFBRztBQUN0QkMsRUFBQUEsS0FBSyxFQUFFLGVBQUNDLEdBQUQsRUFBTUMsTUFBTjtBQUFBLFdBQ0wsVUFBR0QsR0FBRyxDQUFDRSxJQUFQLDZDQUE4Q0QsTUFBTSxDQUFDQyxJQUFyRCw0RUFESztBQUFBLEdBRGU7QUFJdEJDLEVBQUFBLE9BQU8sRUFBRTtBQUphLENBQWpCOztBQU9BLFNBQVNDLFFBQVQsR0FBbUM7QUFBQSxNQUFqQkMsR0FBaUIsdUVBQVgsSUFBSUMsR0FBSixFQUFXO0FBQ3hDLE1BQU1DLEtBQUssR0FBRyxJQUFJRCxHQUFKLEVBQWQsQ0FEd0MsQ0FD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Q0EsUUFBQUEsS0FBSyxFQUFMQTtBQUFqQztBQUFBLEtBREEsRUFFTCxVQUFBaUIsUUFBUTtBQUFBLGFBQUlDLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZZixPQUFaLEVBQXFCTSxNQUFyQixDQUE0QixVQUFDVSxJQUFELEVBQU9DLEdBQVA7QUFBQSwrQ0FDbkNELElBRG1DLDRDQUVyQ0MsR0FGcUMsRUFFL0IsK0JBQW1CakIsT0FBTyxDQUFDaUIsR0FBRCxDQUExQixFQUFpQ0osUUFBakMsQ0FGK0I7QUFBQSxPQUE1QixFQUdSLEVBSFEsQ0FBSjtBQUFBLEtBRkgsRUFNTFgsZ0JBTkssQ0FBUDtBQU9ELEdBdkJEO0FBd0JEIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDIzIFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7Y29ubmVjdH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHtiaW5kQWN0aW9uQ3JlYXRvcnN9IGZyb20gJ3JlZHV4JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQge2NvbnNvbGUgYXMgQ29uc29sZX0gZnJvbSAnZ2xvYmFsL3dpbmRvdyc7XG5cbmNvbnN0IE1pc3NpbmdDb21wID0gKCkgPT4gPGRpdiAvPjtcbmV4cG9ydCBjb25zdCBlcnJvck1zZyA9IHtcbiAgbm9EZXA6IChmYWMsIHBhcmVudCkgPT5cbiAgICBgJHtmYWMubmFtZX0gaXMgcmVxdWlyZWQgYXMgYSBkZXBlbmRlbmN5IG9mICR7cGFyZW50Lm5hbWV9LCBgICtcbiAgICBgYnV0IGlzIG5vdCBwcm92aWRlZCB0byBpbmplY3RDb21wb25lbnRzLiBJdCB3aWxsIG5vdCBiZSByZW5kZXJlZGAsXG4gIG5vdEZ1bmM6ICdgZmFjdG9yeSBhbmQgaXRzIHJlcGxhY2VtZW50IHNob3VsZCBiZSBhIGZ1bmN0aW9uYCdcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RvcihtYXAgPSBuZXcgTWFwKCkpIHtcbiAgY29uc3QgY2FjaGUgPSBuZXcgTWFwKCk7IC8vIG1hcDxmYWN0b3J5LCBmYWN0b3J5IC0+ID8+XG4gIGNvbnN0IGdldCA9IChmYWMsIHBhcmVudCkgPT4ge1xuICAgIGNvbnN0IGZhY3RvcnkgPSBtYXAuZ2V0KGZhYyk7XG5cbiAgICAvLyBmYWN0b3J5IGlzIG5vdCBpbmplY3RlZFxuICAgIGlmICghZmFjdG9yeSkge1xuICAgICAgQ29uc29sZS5lcnJvcihlcnJvck1zZy5ub0RlcChmYWMsIHBhcmVudCkpO1xuICAgICAgcmV0dXJuIE1pc3NpbmdDb21wO1xuICAgIH1cblxuICAgIGNvbnN0IGluc3RhbmNlcyA9XG4gICAgICBjYWNoZS5nZXQoZmFjdG9yeSkgfHxcbiAgICAgIGZhY3RvcnkoXG4gICAgICAgIC4uLihmYWN0b3J5LmRlcHMgPyBmYWN0b3J5LmRlcHMubWFwKGRlcCA9PiBnZXQoZGVwLCBmYWN0b3J5KSkgOiBbXSlcbiAgICAgICk7XG5cbiAgICBjYWNoZS5zZXQoZmFjLCBpbnN0YW5jZXMpO1xuICAgIHJldHVybiBpbnN0YW5jZXM7XG4gIH07XG5cbiAgLy8gaWYgeW91IGhhdmUgdHdvIGZ1bmN0aW9ucyB0aGF0IGhhcHBlbiB0byBoYXZlIHRoZSBleGFjdGx5IHNhbWUgdGV4dFxuICAvLyBpdCB3aWxsIGJlIG92ZXJyaWRlOiAyMDE4LTAyLTA1XG4gIHJldHVybiB7XG4gICAgcHJvdmlkZTogKGZhY3RvcnksIHJlcGxhY2VtZW50KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGZhY3RvcnkgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgQ29uc29sZS5lcnJvcignRXJyb3IgaW5qZWN0aW5nIGZhY3Rvcnk6ICcsIGZhY3RvcnkpO1xuICAgICAgICBDb25zb2xlLmVycm9yKGVycm9yTXNnLm5vdEZ1bmMpO1xuICAgICAgICByZXR1cm4gaW5qZWN0b3IobWFwKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHJlcGxhY2VtZW50ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIENvbnNvbGUuZXJyb3IoJ0Vycm9yIGluamVjdGluZyByZXBsYWNlbWVudCBmb3I6ICcsIGZhY3RvcnkpO1xuICAgICAgICBDb25zb2xlLmVycm9yKGVycm9yTXNnLm5vdEZ1bmMpO1xuICAgICAgICByZXR1cm4gaW5qZWN0b3IobWFwKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGluamVjdG9yKChuZXcgTWFwKG1hcCkpLnNldChmYWN0b3J5LCByZXBsYWNlbWVudCkpO1xuICAgIH0sXG4gICAgZ2V0XG4gIH07XG59XG5cbmNvbnN0IGlkZW50aXR5ID0gc3RhdGUgPT4gKHN0YXRlKTtcbi8vIEhlbHBlciB0byBhZGQgcmVkdWNlciBzdGF0ZSB0byBjdXN0b20gY29tcG9uZW50XG5leHBvcnQgZnVuY3Rpb24gd2l0aFN0YXRlKGxlbnNlcywgbWFwU3RhdGVUb1Byb3BzID0gaWRlbnRpdHksIGFjdGlvbnMgPSB7fSkge1xuICByZXR1cm4gKENvbXBvbmVudCkgPT4ge1xuICAgIGNvbnN0IFdyYXBwZWRDb21wb25lbnQgPSAoe3N0YXRlLCAuLi5wcm9wc30sIHtzZWxlY3RvciwgaWR9KSA9PiAoXG4gICAgICA8Q29tcG9uZW50XG4gICAgICAgIHsuLi5sZW5zZXMucmVkdWNlKFxuICAgICAgICAgICh0b3RhbFN0YXRlLCBsZW5zKSA9PiAoe1xuICAgICAgICAgICAgLi4udG90YWxTdGF0ZSxcbiAgICAgICAgICAgIC4uLmxlbnMoc2VsZWN0b3Ioc3RhdGUpKVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHByb3BzXG4gICAgICAgICl9XG4gICAgICAvPlxuICAgICk7XG4gICAgV3JhcHBlZENvbXBvbmVudC5jb250ZXh0VHlwZXMgPSB7XG4gICAgICBzZWxlY3RvcjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgICBpZDogUHJvcFR5cGVzLnN0cmluZ1xuICAgIH07XG4gICAgcmV0dXJuIGNvbm5lY3QoXG4gICAgICBzdGF0ZSA9PiAoey4uLm1hcFN0YXRlVG9Qcm9wcyhzdGF0ZSksIHN0YXRlfSksXG4gICAgICBkaXNwYXRjaCA9PiBPYmplY3Qua2V5cyhhY3Rpb25zKS5yZWR1Y2UoKGFjY3UsIGtleSkgPT4gKHtcbiAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgW2tleV06IGJpbmRBY3Rpb25DcmVhdG9ycyhhY3Rpb25zW2tleV0sIGRpc3BhdGNoKVxuICAgICAgfSksIHt9KVxuICAgICkoV3JhcHBlZENvbXBvbmVudCk7XG4gIH1cbn1cbiJdfQ==