kepler.gl.geoiq
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
160 lines (131 loc) • 16.8 kB
JavaScript
;
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
var _getPrototypeOf3 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _react = _interopRequireWildcard(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _reselect = require("reselect");
var _styledComponents = require("../common/styled-components");
var _icons = require("../common/icons");
var _sourceDataCatalog = _interopRequireDefault(require("./source-data-catalog"));
var _filterPanel = _interopRequireDefault(require("./filter-panel/filter-panel"));
// Copyright (c) 2019 Uber Technologies, Inc.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
FilterManagerFactory.deps = [_sourceDataCatalog["default"], _filterPanel["default"]];
function FilterManagerFactory(SourceDataCatalog, FilterPanel) {
var _class, _temp;
return _temp = _class =
/*#__PURE__*/
function (_Component) {
(0, _inherits2["default"])(FilterManager, _Component);
function FilterManager() {
var _getPrototypeOf2;
var _this;
(0, _classCallCheck2["default"])(this, FilterManager);
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
_this = (0, _possibleConstructorReturn2["default"])(this, (_getPrototypeOf2 = (0, _getPrototypeOf3["default"])(FilterManager)).call.apply(_getPrototypeOf2, [this].concat(args)));
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "datasetsSelector", function (state) {
return state.datasets;
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "defaultDatasetSelector", (0, _reselect.createSelector)(_this.datasetsSelector, function (datasets) {
return Object.keys(datasets).length && Object.keys(datasets)[0] || null;
}));
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_addFilter", function () {
var defaultDataset = _this.defaultDatasetSelector(_this.props);
_this.props.addFilter(defaultDataset);
});
return _this;
}
(0, _createClass2["default"])(FilterManager, [{
key: "render",
value: function render() {
var _this2 = this;
var _this$props = this.props,
filters = _this$props.filters,
datasets = _this$props.datasets;
var isAnyFilterAnimating = filters.some(function (f) {
return f.isAnimating;
});
var hadEmptyFilter = filters.some(function (f) {
return !f.name;
});
var hadDataset = Object.keys(datasets).length;
return _react["default"].createElement("div", {
className: "filter-manager"
}, _react["default"].createElement(SourceDataCatalog, {
datasets: datasets,
showDatasetTable: this.props.showDatasetTable
}), _react["default"].createElement(_styledComponents.SidePanelDivider, null), _react["default"].createElement(_styledComponents.SidePanelSection, null, filters && filters.map(function (filter, idx) {
return _react["default"].createElement(FilterPanel, {
key: "".concat(filter.id, "-").concat(idx),
idx: idx,
filters: filters,
filter: filter,
datasets: datasets,
isAnyFilterAnimating: isAnyFilterAnimating,
removeFilter: function removeFilter() {
return _this2.props.removeFilter(idx);
},
enlargeFilter: function enlargeFilter() {
return _this2.props.enlargeFilter(idx);
},
toggleAnimation: function toggleAnimation() {
return _this2.props.toggleAnimation(idx);
},
setFilter: _this2.props.setFilter
});
})), _react["default"].createElement(_styledComponents.Button, {
inactive: hadEmptyFilter || !hadDataset,
width: "105px",
onClick: this._addFilter
}, _react["default"].createElement(_icons.Add, {
height: "12px"
}), "Add Filter"));
}
}]);
return FilterManager;
}(_react.Component), (0, _defineProperty2["default"])(_class, "propTypes", {
datasets: _propTypes["default"].object,
addFilter: _propTypes["default"].func.isRequired,
removeFilter: _propTypes["default"].func.isRequired,
enlargeFilter: _propTypes["default"].func.isRequired,
toggleAnimation: _propTypes["default"].func.isRequired,
setFilter: _propTypes["default"].func.isRequired,
filters: _propTypes["default"].arrayOf(_propTypes["default"].any).isRequired,
showDatasetTable: _propTypes["default"].func,
// fields can be undefined when dataset is not selected
fields: _propTypes["default"].arrayOf(_propTypes["default"].any)
}), _temp;
}
var _default = FilterManagerFactory;
exports["default"] = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3NpZGUtcGFuZWwvZmlsdGVyLW1hbmFnZXIuanMiXSwibmFtZXMiOlsiRmlsdGVyTWFuYWdlckZhY3RvcnkiLCJkZXBzIiwiU291cmNlRGF0YUNhdGFsb2dGYWN0b3J5IiwiRmlsdGVyUGFuZWxGYWN0b3J5IiwiU291cmNlRGF0YUNhdGFsb2ciLCJGaWx0ZXJQYW5lbCIsInN0YXRlIiwiZGF0YXNldHMiLCJkYXRhc2V0c1NlbGVjdG9yIiwiT2JqZWN0Iiwia2V5cyIsImxlbmd0aCIsImRlZmF1bHREYXRhc2V0IiwiZGVmYXVsdERhdGFzZXRTZWxlY3RvciIsInByb3BzIiwiYWRkRmlsdGVyIiwiZmlsdGVycyIsImlzQW55RmlsdGVyQW5pbWF0aW5nIiwic29tZSIsImYiLCJpc0FuaW1hdGluZyIsImhhZEVtcHR5RmlsdGVyIiwibmFtZSIsImhhZERhdGFzZXQiLCJzaG93RGF0YXNldFRhYmxlIiwibWFwIiwiZmlsdGVyIiwiaWR4IiwiaWQiLCJyZW1vdmVGaWx0ZXIiLCJlbmxhcmdlRmlsdGVyIiwidG9nZ2xlQW5pbWF0aW9uIiwic2V0RmlsdGVyIiwiX2FkZEZpbHRlciIsIkNvbXBvbmVudCIsIlByb3BUeXBlcyIsIm9iamVjdCIsImZ1bmMiLCJpc1JlcXVpcmVkIiwiYXJyYXlPZiIsImFueSIsImZpZWxkcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW9CQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFLQTs7QUFDQTs7QUFDQTs7QUE5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFjQUEsb0JBQW9CLENBQUNDLElBQXJCLEdBQTRCLENBQUNDLDZCQUFELEVBQTJCQyx1QkFBM0IsQ0FBNUI7O0FBRUEsU0FBU0gsb0JBQVQsQ0FBOEJJLGlCQUE5QixFQUFpREMsV0FB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QUE7QUFBQSxJQUFtQ0MsZ0JBQW5DLHlEQUNxQjtBQUNqQjNCLElBQUFBLFFBQVEsRUFBRTRCLHNCQUFVQyxNQURIO0FBRWpCckIsSUFBQUEsU0FBUyxFQUFFb0Isc0JBQVVFLElBQVYsQ0FBZUMsVUFGVDtBQUdqQlQsSUFBQUEsWUFBWSxFQUFFTSxzQkFBVUUsSUFBVixDQUFlQyxVQUhaO0FBSWpCUixJQUFBQSxhQUFhLEVBQUVLLHNCQUFVRSxJQUFWLENBQWVDLFVBSmI7QUFLakJQLElBQUFBLGVBQWUsRUFBRUksc0JBQVVFLElBQVYsQ0FBZUMsVUFMZjtBQU1qQk4sSUFBQUEsU0FBUyxFQUFFRyxzQkFBVUUsSUFBVixDQUFlQyxVQU5UO0FBT2pCdEIsSUFBQUEsT0FBTyxFQUFFbUIsc0JBQVVJLE9BQVYsQ0FBa0JKLHNCQUFVSyxHQUE1QixFQUFpQ0YsVUFQekI7QUFRakJkLElBQUFBLGdCQUFnQixFQUFFVyxzQkFBVUUsSUFSWDtBQVVqQjtBQUNBSSxJQUFBQSxNQUFNLEVBQUVOLHNCQUFVSSxPQUFWLENBQWtCSixzQkFBVUssR0FBNUI7QUFYUyxHQURyQjtBQXVFRDs7ZUFFY3hDLG9CIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDE5IFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IFJlYWN0LCB7Q29tcG9uZW50fSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHtjcmVhdGVTZWxlY3Rvcn0gZnJvbSAncmVzZWxlY3QnO1xuaW1wb3J0IHtcbiAgU2lkZVBhbmVsU2VjdGlvbixcbiAgU2lkZVBhbmVsRGl2aWRlcixcbiAgQnV0dG9uXG59IGZyb20gJ2NvbXBvbmVudHMvY29tbW9uL3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCB7QWRkfSBmcm9tICdjb21wb25lbnRzL2NvbW1vbi9pY29ucyc7XG5pbXBvcnQgU291cmNlRGF0YUNhdGFsb2dGYWN0b3J5IGZyb20gJy4vc291cmNlLWRhdGEtY2F0YWxvZyc7XG5pbXBvcnQgRmlsdGVyUGFuZWxGYWN0b3J5IGZyb20gJy4vZmlsdGVyLXBhbmVsL2ZpbHRlci1wYW5lbCc7XG5cbkZpbHRlck1hbmFnZXJGYWN0b3J5LmRlcHMgPSBbU291cmNlRGF0YUNhdGFsb2dGYWN0b3J5LCBGaWx0ZXJQYW5lbEZhY3RvcnldO1xuXG5mdW5jdGlvbiBGaWx0ZXJNYW5hZ2VyRmFjdG9yeShTb3VyY2VEYXRhQ2F0YWxvZywgRmlsdGVyUGFuZWwpIHtcbiAgcmV0dXJuIGNsYXNzIEZpbHRlck1hbmFnZXIgZXh0ZW5kcyBDb21wb25lbnQge1xuICAgIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgICBkYXRhc2V0czogUHJvcFR5cGVzLm9iamVjdCxcbiAgICAgIGFkZEZpbHRlcjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICAgIHJlbW92ZUZpbHRlcjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICAgIGVubGFyZ2VGaWx0ZXI6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgICB0b2dnbGVBbmltYXRpb246IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgICBzZXRGaWx0ZXI6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgICBmaWx0ZXJzOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuYW55KS5pc1JlcXVpcmVkLFxuICAgICAgc2hvd0RhdGFzZXRUYWJsZTogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgICAgIC8vIGZpZWxkcyBjYW4gYmUgdW5kZWZpbmVkIHdoZW4gZGF0YXNldCBpcyBub3Qgc2VsZWN0ZWRcbiAgICAgIGZpZWxkczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmFueSlcbiAgICB9O1xuXG4gICAgLyogc2VsZWN0b3JzICovXG4gICAgZGF0YXNldHNTZWxlY3RvciA9IHN0YXRlID0+IHN0YXRlLmRhdGFzZXRzO1xuICAgIGRlZmF1bHREYXRhc2V0U2VsZWN0b3IgPSBjcmVhdGVTZWxlY3RvcihcbiAgICAgIHRoaXMuZGF0YXNldHNTZWxlY3RvcixcbiAgICAgIGRhdGFzZXRzID0+XG4gICAgICAgIChPYmplY3Qua2V5cyhkYXRhc2V0cykubGVuZ3RoICYmIE9iamVjdC5rZXlzKGRhdGFzZXRzKVswXSkgfHwgbnVsbFxuICAgICk7XG5cbiAgICAvKiBhY3Rpb25zICovXG4gICAgX2FkZEZpbHRlciA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGRlZmF1bHREYXRhc2V0ID0gdGhpcy5kZWZhdWx0RGF0YXNldFNlbGVjdG9yKHRoaXMucHJvcHMpO1xuICAgICAgdGhpcy5wcm9wcy5hZGRGaWx0ZXIoZGVmYXVsdERhdGFzZXQpO1xuICAgIH07XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICBjb25zdCB7ZmlsdGVycywgZGF0YXNldHN9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IGlzQW55RmlsdGVyQW5pbWF0aW5nID0gZmlsdGVycy5zb21lKGYgPT4gZi5pc0FuaW1hdGluZyk7XG4gICAgICBjb25zdCBoYWRFbXB0eUZpbHRlciA9IGZpbHRlcnMuc29tZShmID0+ICFmLm5hbWUpO1xuICAgICAgY29uc3QgaGFkRGF0YXNldCA9IE9iamVjdC5rZXlzKGRhdGFzZXRzKS5sZW5ndGg7XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmlsdGVyLW1hbmFnZXJcIj5cbiAgICAgICAgICA8U291cmNlRGF0YUNhdGFsb2dcbiAgICAgICAgICAgIGRhdGFzZXRzPXtkYXRhc2V0c31cbiAgICAgICAgICAgIHNob3dEYXRhc2V0VGFibGU9e3RoaXMucHJvcHMuc2hvd0RhdGFzZXRUYWJsZX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIDxTaWRlUGFuZWxEaXZpZGVyIC8+XG4gICAgICAgICAgPFNpZGVQYW5lbFNlY3Rpb24+XG4gICAgICAgICAgICB7ZmlsdGVycyAmJlxuICAgICAgICAgICAgICBmaWx0ZXJzLm1hcCgoZmlsdGVyLCBpZHgpID0+IChcbiAgICAgICAgICAgICAgICA8RmlsdGVyUGFuZWxcbiAgICAgICAgICAgICAgICAgIGtleT17YCR7ZmlsdGVyLmlkfS0ke2lkeH1gfVxuICAgICAgICAgICAgICAgICAgaWR4PXtpZHh9XG4gICAgICAgICAgICAgICAgICBmaWx0ZXJzPXtmaWx0ZXJzfVxuICAgICAgICAgICAgICAgICAgZmlsdGVyPXtmaWx0ZXJ9XG4gICAgICAgICAgICAgICAgICBkYXRhc2V0cz17ZGF0YXNldHN9XG4gICAgICAgICAgICAgICAgICBpc0FueUZpbHRlckFuaW1hdGluZz17aXNBbnlGaWx0ZXJBbmltYXRpbmd9XG4gICAgICAgICAgICAgICAgICByZW1vdmVGaWx0ZXI9eygpID0+IHRoaXMucHJvcHMucmVtb3ZlRmlsdGVyKGlkeCl9XG4gICAgICAgICAgICAgICAgICBlbmxhcmdlRmlsdGVyPXsoKSA9PiB0aGlzLnByb3BzLmVubGFyZ2VGaWx0ZXIoaWR4KX1cbiAgICAgICAgICAgICAgICAgIHRvZ2dsZUFuaW1hdGlvbj17KCkgPT4gdGhpcy5wcm9wcy50b2dnbGVBbmltYXRpb24oaWR4KX1cbiAgICAgICAgICAgICAgICAgIHNldEZpbHRlcj17dGhpcy5wcm9wcy5zZXRGaWx0ZXJ9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9TaWRlUGFuZWxTZWN0aW9uPlxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIGluYWN0aXZlPXtoYWRFbXB0eUZpbHRlciB8fCAhaGFkRGF0YXNldH1cbiAgICAgICAgICAgIHdpZHRoPVwiMTA1cHhcIlxuICAgICAgICAgICAgb25DbGljaz17dGhpcy5fYWRkRmlsdGVyfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxBZGQgaGVpZ2h0PVwiMTJweFwiIC8+XG4gICAgICAgICAgICBBZGQgRmlsdGVyXG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZpbHRlck1hbmFnZXJGYWN0b3J5O1xuIl19