kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
757 lines (665 loc) • 91.8 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.AggregationTypeSelector = exports.AggrColorScaleSelector = exports.ChannelByValueSelector = exports.ColorRangeConfig = exports.ArcLayerColorSelector = exports.LayerColorSelector = exports.HowToButton = exports.default = undefined;
var _defineProperty2 = require('babel-runtime/helpers/defineProperty');
var _defineProperty3 = _interopRequireDefault(_defineProperty2);
var _extends3 = require('babel-runtime/helpers/extends');
var _extends4 = _interopRequireDefault(_extends3);
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = require('babel-runtime/helpers/createClass');
var _createClass3 = _interopRequireDefault(_createClass2);
var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
var _inherits2 = require('babel-runtime/helpers/inherits');
var _inherits3 = _interopRequireDefault(_inherits2);
var _taggedTemplateLiteral2 = require('babel-runtime/helpers/taggedTemplateLiteral');
var _taggedTemplateLiteral3 = _interopRequireDefault(_taggedTemplateLiteral2);
var _class, _temp;
var _templateObject = (0, _taggedTemplateLiteral3.default)(['\n position: relative;\n margin-top: 12px;\n'], ['\n position: relative;\n margin-top: 12px;\n']),
_templateObject2 = (0, _taggedTemplateLiteral3.default)(['\n margin-top: 12px;\n'], ['\n margin-top: 12px;\n']),
_templateObject3 = (0, _taggedTemplateLiteral3.default)(['\n position: absolute;\n right: 0;\n top: 0;\n'], ['\n position: absolute;\n right: 0;\n top: 0;\n']); // Copyright (c) 2018 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.
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
var _styledComponents = require('styled-components');
var _styledComponents2 = _interopRequireDefault(_styledComponents);
var _styledComponents3 = require('../../common/styled-components');
var _itemSelector = require('../../common/item-selector/item-selector');
var _itemSelector2 = _interopRequireDefault(_itemSelector);
var _visConfigByFieldSelector = require('./vis-config-by-field-selector');
var _visConfigByFieldSelector2 = _interopRequireDefault(_visConfigByFieldSelector);
var _layerColumnConfig = require('./layer-column-config');
var _layerColumnConfig2 = _interopRequireDefault(_layerColumnConfig);
var _layerTypeSelector = require('./layer-type-selector');
var _layerTypeSelector2 = _interopRequireDefault(_layerTypeSelector);
var _dimensionScaleSelector = require('./dimension-scale-selector');
var _dimensionScaleSelector2 = _interopRequireDefault(_dimensionScaleSelector);
var _colorSelector = require('./color-selector');
var _colorSelector2 = _interopRequireDefault(_colorSelector);
var _sourceDataSelector = require('../source-data-selector');
var _sourceDataSelector2 = _interopRequireDefault(_sourceDataSelector);
var _visConfigSwitch = require('./vis-config-switch');
var _visConfigSwitch2 = _interopRequireDefault(_visConfigSwitch);
var _visConfigSlider = require('./vis-config-slider');
var _visConfigSlider2 = _interopRequireDefault(_visConfigSlider);
var _layerConfigGroup = require('./layer-config-group');
var _layerConfigGroup2 = _interopRequireDefault(_layerConfigGroup);
var _textLabelPanel = require('./text-label-panel');
var _textLabelPanel2 = _interopRequireDefault(_textLabelPanel);
var _layerFactory = require('../../../layers/layer-factory');
var _utils = require('../../../utils/utils');
var _defaultSettings = require('../../../constants/default-settings');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var StyledLayerConfigurator = _styledComponents2.default.div.attrs({
className: 'layer-panel__config'
})(_templateObject);
var StyledLayerVisualConfigurator = _styledComponents2.default.div.attrs({
className: 'layer-panel__config__visualC-config'
})(_templateObject2);
var LayerConfigurator = (_temp = _class = function (_Component) {
(0, _inherits3.default)(LayerConfigurator, _Component);
function LayerConfigurator() {
(0, _classCallCheck3.default)(this, LayerConfigurator);
return (0, _possibleConstructorReturn3.default)(this, (LayerConfigurator.__proto__ || Object.getPrototypeOf(LayerConfigurator)).apply(this, arguments));
}
(0, _createClass3.default)(LayerConfigurator, [{
key: '_renderPointLayerConfig',
value: function _renderPointLayerConfig(props) {
return this._renderScatterplotLayerConfig(props);
}
}, {
key: '_renderIconLayerConfig',
value: function _renderIconLayerConfig(props) {
return this._renderScatterplotLayerConfig(props);
}
}, {
key: '_renderScatterplotLayerConfig',
value: function _renderScatterplotLayerConfig(_ref) {
var layer = _ref.layer,
visConfiguratorProps = _ref.visConfiguratorProps,
layerChannelConfigProps = _ref.layerChannelConfigProps,
layerConfiguratorProps = _ref.layerConfiguratorProps;
return _react2.default.createElement(
StyledLayerVisualConfigurator,
null,
_react2.default.createElement(
_layerConfigGroup2.default,
{ label: 'color' },
layer.config.colorField ? _react2.default.createElement(ColorRangeConfig, visConfiguratorProps) : _react2.default.createElement(LayerColorSelector, layerConfiguratorProps),
_react2.default.createElement(ChannelByValueSelector, (0, _extends4.default)({
channel: layer.visualChannels.color
}, layerChannelConfigProps)),
_react2.default.createElement(_visConfigSlider2.default, (0, _extends4.default)({}, _layerFactory.LAYER_VIS_CONFIGS.opacity, visConfiguratorProps))
),
_react2.default.createElement(
_layerConfigGroup2.default,
{ label: 'radius' },
!layer.config.sizeField ? _react2.default.createElement(_visConfigSlider2.default, (0, _extends4.default)({}, _layerFactory.LAYER_VIS_CONFIGS.radius, visConfiguratorProps, {
label: false,
disabled: Boolean(layer.config.sizeField)
})) : _react2.default.createElement(_visConfigSlider2.default, (0, _extends4.default)({}, _layerFactory.LAYER_VIS_CONFIGS.radiusRange, visConfiguratorProps, {
disabled: !layer.config.sizeField || layer.config.visConfig.fixedRadius
})),
_react2.default.createElement(ChannelByValueSelector, (0, _extends4.default)({
channel: layer.visualChannels.size
}, layerChannelConfigProps)),
layer.config.sizeField ? _react2.default.createElement(_visConfigSwitch2.default, (0, _extends4.default)({}, _layerFactory.LAYER_VIS_CONFIGS.fixedRadius, visConfiguratorProps, {
disabled: !layer.config.sizeField
})) : null
),
layer.type === _defaultSettings.LAYER_TYPES.point ? _react2.default.createElement(
_layerConfigGroup2.default,
(0, _extends4.default)({}, _layerFactory.LAYER_VIS_CONFIGS.outline, visConfiguratorProps),
_react2.default.createElement(_visConfigSlider2.default, (0, _extends4.default)({}, _layerFactory.LAYER_VIS_CONFIGS.thickness, visConfiguratorProps, {
label: false,
disabled: !layer.config.visConfig.outline
}))
) : null,
_react2.default.createElement(_textLabelPanel2.default, {
visConfiguratorProps: visConfiguratorProps,
layerConfiguratorProps: layerConfiguratorProps,
textLabel: layer.config.textLabel
}),
_react2.default.createElement(_layerConfigGroup2.default, (0, _extends4.default)({}, _layerFactory.LAYER_VIS_CONFIGS['hi-precision'], visConfiguratorProps))
);
}
}, {
key: '_renderClusterLayerConfig',
value: function _renderClusterLayerConfig(_ref2) {
var layer = _ref2.layer,
visConfiguratorProps = _ref2.visConfiguratorProps,
layerConfiguratorProps = _ref2.layerConfiguratorProps,
layerChannelConfigProps = _ref2.layerChannelConfigProps;
return _react2.default.createElement(
StyledLayerVisualConfigurator,
null,
_react2.default.createElement(
_layerConfigGroup2.default,
{ label: 'color' },
_react2.default.createElement(ColorRangeConfig, visConfiguratorProps),
_react2.default.createElement(AggrColorScaleSelector, layerConfiguratorProps),
_react2.default.createElement(ChannelByValueSelector, (0, _extends4.default)({
channel: layer.visualChannels.color
}, layerChannelConfigProps)),
layer.visConfigSettings.colorAggregation.condition(layer.config) ? _react2.default.createElement(AggregationTypeSelector, (0, _extends4.default)({}, layer.visConfigSettings.colorAggregation, layerChannelConfigProps, {
channel: layer.visualChannels.color
})) : null,
_react2.default.createElement(_visConfigSlider2.default, (0, _extends4.default)({}, layer.visConfigSettings.opacity, visConfiguratorProps))
),
_react2.default.createElement(
_layerConfigGroup2.default,
{ label: 'radius' },
_react2.default.createElement(_visConfigSlider2.default, (0, _extends4.default)({}, layer.visConfigSettings.clusterRadius, visConfiguratorProps)),
_react2.default.createElement(_visConfigSlider2.default, (0, _extends4.default)({}, layer.visConfigSettings.radiusRange, visConfiguratorProps))
)
);
}
}, {
key: '_renderHeatmapLayerConfig',
value: function _renderHeatmapLayerConfig(_ref3) {
var layer = _ref3.layer,
visConfiguratorProps = _ref3.visConfiguratorProps,
layerConfiguratorProps = _ref3.layerConfiguratorProps,
layerChannelConfigProps = _ref3.layerChannelConfigProps;
return _react2.default.createElement(
StyledLayerVisualConfigurator,
null,
_react2.default.createElement(
_layerConfigGroup2.default,
{ label: 'color' },
_react2.default.createElement(ColorRangeConfig, visConfiguratorProps),
_react2.default.createElement(_visConfigSlider2.default, (0, _extends4.default)({}, layer.visConfigSettings.opacity, visConfiguratorProps))
),
_react2.default.createElement(
_layerConfigGroup2.default,
{ label: 'radius' },
_react2.default.createElement(_visConfigSlider2.default, (0, _extends4.default)({}, layer.visConfigSettings.radius, visConfiguratorProps, {
label: false
}))
),
_react2.default.createElement(
_layerConfigGroup2.default,
{ label: 'weight' },
_react2.default.createElement(ChannelByValueSelector, (0, _extends4.default)({
channel: layer.visualChannels.weight
}, layerChannelConfigProps))
)
);
}
}, {
key: '_renderGridLayerConfig',
value: function _renderGridLayerConfig(props) {
return this._renderAggregationLayerConfig(props);
}
}, {
key: '_renderHexagonLayerConfig',
value: function _renderHexagonLayerConfig(props) {
return this._renderAggregationLayerConfig(props);
}
}, {
key: '_renderAggregationLayerConfig',
value: function _renderAggregationLayerConfig(_ref4) {
var layer = _ref4.layer,
visConfiguratorProps = _ref4.visConfiguratorProps,
layerConfiguratorProps = _ref4.layerConfiguratorProps,
layerChannelConfigProps = _ref4.layerChannelConfigProps;
var config = layer.config;
var enable3d = config.visConfig.enable3d;
var elevationByDescription = 'When off, height is based on count of points';
var colorByDescription = 'When off, color is based on count of points';
return _react2.default.createElement(
StyledLayerVisualConfigurator,
null,
_react2.default.createElement(
_layerConfigGroup2.default,
{ label: 'color' },
_react2.default.createElement(ColorRangeConfig, visConfiguratorProps),
_react2.default.createElement(AggrColorScaleSelector, layerConfiguratorProps),
_react2.default.createElement(ChannelByValueSelector, (0, _extends4.default)({
channel: layer.visualChannels.color
}, layerChannelConfigProps)),
layer.visConfigSettings.colorAggregation.condition(layer.config) ? _react2.default.createElement(AggregationTypeSelector, (0, _extends4.default)({}, layer.visConfigSettings.colorAggregation, layerChannelConfigProps, {
descreiption: colorByDescription,
channel: layer.visualChannels.color
})) : null,
layer.visConfigSettings.percentile && layer.visConfigSettings.percentile.condition(layer.config) ? _react2.default.createElement(_visConfigSlider2.default, (0, _extends4.default)({}, layer.visConfigSettings.percentile, visConfiguratorProps)) : null,
_react2.default.createElement(_visConfigSlider2.default, (0, _extends4.default)({}, layer.visConfigSettings.opacity, visConfiguratorProps))
),
_react2.default.createElement(
_layerConfigGroup2.default,
{ label: 'radius' },
_react2.default.createElement(_visConfigSlider2.default, (0, _extends4.default)({}, layer.visConfigSettings.worldUnitSize, visConfiguratorProps)),
_react2.default.createElement(_visConfigSlider2.default, (0, _extends4.default)({}, layer.visConfigSettings.coverage, visConfiguratorProps))
),
layer.visConfigSettings.enable3d ? _react2.default.createElement(
_layerConfigGroup2.default,
(0, _extends4.default)({}, layer.visConfigSettings.enable3d, visConfiguratorProps),
_react2.default.createElement(_visConfigSlider2.default, (0, _extends4.default)({}, layer.visConfigSettings.elevationScale, visConfiguratorProps)),
_react2.default.createElement(ChannelByValueSelector, (0, _extends4.default)({}, layerChannelConfigProps, {
channel: layer.visualChannels.size,
description: elevationByDescription,
disabled: !enable3d
})),
layer.visConfigSettings.sizeAggregation.condition(layer.config) ? _react2.default.createElement(AggregationTypeSelector, (0, _extends4.default)({}, layer.visConfigSettings.sizeAggregation, layerChannelConfigProps, {
channel: layer.visualChannels.size
})) : null,
layer.visConfigSettings.elevationPercentile.condition(layer.config) ? _react2.default.createElement(_visConfigSlider2.default, (0, _extends4.default)({}, layer.visConfigSettings.elevationPercentile, visConfiguratorProps)) : null
) : null,
_react2.default.createElement(_layerConfigGroup2.default, (0, _extends4.default)({}, layer.visConfigSettings['hi-precision'], visConfiguratorProps))
);
}
// TODO: Shan move these into layer class
}, {
key: '_renderHexagonIdLayerConfig',
value: function _renderHexagonIdLayerConfig(_ref5) {
var layer = _ref5.layer,
visConfiguratorProps = _ref5.visConfiguratorProps,
layerConfiguratorProps = _ref5.layerConfiguratorProps,
layerChannelConfigProps = _ref5.layerChannelConfigProps;
return _react2.default.createElement(
StyledLayerVisualConfigurator,
null,
_react2.default.createElement(
_layerConfigGroup2.default,
{ label: 'color' },
layer.config.colorField ? _react2.default.createElement(ColorRangeConfig, visConfiguratorProps) : _react2.default.createElement(LayerColorSelector, layerConfiguratorProps),
_react2.default.createElement(ChannelByValueSelector, (0, _extends4.default)({
channel: layer.visualChannels.color
}, layerChannelConfigProps)),
_react2.default.createElement(_visConfigSlider2.default, (0, _extends4.default)({}, _layerFactory.LAYER_VIS_CONFIGS.opacity, visConfiguratorProps))
),
_react2.default.createElement(
_layerConfigGroup2.default,
{ label: 'coverage' },
!layer.config.coverageField ? _react2.default.createElement(_visConfigSlider2.default, (0, _extends4.default)({}, layer.visConfigSettings.coverage, visConfiguratorProps)) : _react2.default.createElement(_visConfigSlider2.default, (0, _extends4.default)({}, layer.visConfigSettings.coverageRange, visConfiguratorProps)),
_react2.default.createElement(ChannelByValueSelector, (0, _extends4.default)({
channel: layer.visualChannels.coverage
}, layerChannelConfigProps))
),
_react2.default.createElement(
_layerConfigGroup2.default,
(0, _extends4.default)({}, _layerFactory.LAYER_VIS_CONFIGS.enable3d, visConfiguratorProps),
_react2.default.createElement(ChannelByValueSelector, (0, _extends4.default)({
channel: layer.visualChannels.size
}, layerChannelConfigProps)),
_react2.default.createElement(_visConfigSlider2.default, (0, _extends4.default)({}, _layerFactory.LAYER_VIS_CONFIGS.elevationRange, visConfiguratorProps))
),
_react2.default.createElement(_layerConfigGroup2.default, (0, _extends4.default)({}, _layerFactory.LAYER_VIS_CONFIGS['hi-precision'], visConfiguratorProps))
);
}
}, {
key: '_renderArcLayerConfig',
value: function _renderArcLayerConfig(args) {
return this._renderLineLayerConfig(args);
}
}, {
key: '_renderLineLayerConfig',
value: function _renderLineLayerConfig(_ref6) {
var layer = _ref6.layer,
visConfiguratorProps = _ref6.visConfiguratorProps,
layerConfiguratorProps = _ref6.layerConfiguratorProps,
layerChannelConfigProps = _ref6.layerChannelConfigProps;
return _react2.default.createElement(
StyledLayerVisualConfigurator,
null,
_react2.default.createElement(
_layerConfigGroup2.default,
{ label: 'color' },
layer.config.colorField ? _react2.default.createElement(ColorRangeConfig, visConfiguratorProps) : _react2.default.createElement(ArcLayerColorSelector, {
layer: layer,
onChangeConfig: layerConfiguratorProps.onChange,
onChangeVisConfig: visConfiguratorProps.onChange
}),
_react2.default.createElement(ChannelByValueSelector, (0, _extends4.default)({
channel: layer.visualChannels.color
}, layerChannelConfigProps)),
_react2.default.createElement(_visConfigSlider2.default, (0, _extends4.default)({}, _layerFactory.LAYER_VIS_CONFIGS.opacity, visConfiguratorProps))
),
_react2.default.createElement(
_layerConfigGroup2.default,
{ label: 'stroke' },
layer.config.sizeField ? _react2.default.createElement(_visConfigSlider2.default, (0, _extends4.default)({}, _layerFactory.LAYER_VIS_CONFIGS.strokeWidthRange, visConfiguratorProps, {
disabled: !layer.config.sizeField
})) : _react2.default.createElement(_visConfigSlider2.default, (0, _extends4.default)({}, _layerFactory.LAYER_VIS_CONFIGS.thickness, visConfiguratorProps)),
_react2.default.createElement(ChannelByValueSelector, (0, _extends4.default)({
channel: layer.visualChannels.size
}, layerChannelConfigProps))
),
_react2.default.createElement(_layerConfigGroup2.default, (0, _extends4.default)({}, _layerFactory.LAYER_VIS_CONFIGS['hi-precision'], visConfiguratorProps))
);
}
}, {
key: '_renderGeojsonLayerConfig',
value: function _renderGeojsonLayerConfig(_ref7) {
var layer = _ref7.layer,
visConfiguratorProps = _ref7.visConfiguratorProps,
layerConfiguratorProps = _ref7.layerConfiguratorProps,
layerChannelConfigProps = _ref7.layerChannelConfigProps;
var _layer$meta$featureTy = layer.meta.featureTypes,
featureTypes = _layer$meta$featureTy === undefined ? {} : _layer$meta$featureTy,
visConfig = layer.config.visConfig;
return _react2.default.createElement(
StyledLayerVisualConfigurator,
null,
_react2.default.createElement(
_layerConfigGroup2.default,
{ label: 'color' },
featureTypes.polygon ? _react2.default.createElement(_visConfigSwitch2.default, (0, _extends4.default)({}, visConfiguratorProps, _layerFactory.LAYER_VIS_CONFIGS.filled)) : null,
layer.config.colorField ? _react2.default.createElement(ColorRangeConfig, visConfiguratorProps) : _react2.default.createElement(LayerColorSelector, layerConfiguratorProps),
_react2.default.createElement(ChannelByValueSelector, (0, _extends4.default)({
channel: layer.visualChannels.color
}, layerChannelConfigProps)),
_react2.default.createElement(_visConfigSlider2.default, (0, _extends4.default)({}, _layerFactory.LAYER_VIS_CONFIGS.opacity, visConfiguratorProps))
),
featureTypes.line || featureTypes.polygon ? _react2.default.createElement(
_layerConfigGroup2.default,
(0, _extends4.default)({
label: 'stroke'
}, visConfiguratorProps, featureTypes.polygon ? _layerFactory.LAYER_VIS_CONFIGS.stroked : {}),
visConfig.stroked ? _react2.default.createElement(
'div',
null,
_react2.default.createElement(_visConfigSlider2.default, (0, _extends4.default)({}, _layerFactory.LAYER_VIS_CONFIGS.thickness, visConfiguratorProps)),
_react2.default.createElement(ChannelByValueSelector, (0, _extends4.default)({
channel: layer.visualChannels.size
}, layerChannelConfigProps)),
_react2.default.createElement(_visConfigSlider2.default, (0, _extends4.default)({}, _layerFactory.LAYER_VIS_CONFIGS.strokeWidthRange, visConfiguratorProps, {
disabled: !layer.config.sizeField
}))
) : null
) : null,
featureTypes.polygon && visConfig.filled ? _react2.default.createElement(
_layerConfigGroup2.default,
(0, _extends4.default)({}, visConfiguratorProps, _layerFactory.LAYER_VIS_CONFIGS.enable3d),
_react2.default.createElement(_visConfigSlider2.default, (0, _extends4.default)({}, _layerFactory.LAYER_VIS_CONFIGS.elevationScale, visConfiguratorProps)),
_react2.default.createElement(ChannelByValueSelector, (0, _extends4.default)({
channel: layer.visualChannels.height
}, layerChannelConfigProps)),
_react2.default.createElement(_visConfigSwitch2.default, (0, _extends4.default)({}, visConfiguratorProps, _layerFactory.LAYER_VIS_CONFIGS.wireframe))
) : null,
featureTypes.point ? _react2.default.createElement(
'div',
null,
_react2.default.createElement(_visConfigSlider2.default, (0, _extends4.default)({}, _layerFactory.LAYER_VIS_CONFIGS.radius, visConfiguratorProps, {
label: 'Point Radius',
disabled: Boolean(layer.config.radiusField)
})),
_react2.default.createElement(ChannelByValueSelector, (0, _extends4.default)({
channel: layer.visualChannels.radius
}, layerChannelConfigProps)),
_react2.default.createElement(_visConfigSlider2.default, (0, _extends4.default)({}, _layerFactory.LAYER_VIS_CONFIGS.radiusRange, visConfiguratorProps, {
disabled: !layer.config.radiusField
}))
) : null,
_react2.default.createElement(_layerConfigGroup2.default, (0, _extends4.default)({}, _layerFactory.LAYER_VIS_CONFIGS['hi-precision'], visConfiguratorProps))
);
}
}, {
key: 'render',
value: function render() {
var _this2 = this;
var _props = this.props,
layer = _props.layer,
datasets = _props.datasets,
updateLayerConfig = _props.updateLayerConfig,
layerTypeOptions = _props.layerTypeOptions,
updateLayerType = _props.updateLayerType;
var _ref8 = layer.config.dataId ? datasets[layer.config.dataId] : {},
_ref8$fields = _ref8.fields,
fields = _ref8$fields === undefined ? [] : _ref8$fields,
fieldPairs = _ref8.fieldPairs;
var config = layer.config;
var commonConfigProp = {
layer: layer,
fields: fields
};
var visConfiguratorProps = (0, _extends4.default)({}, commonConfigProp, {
onChange: this.props.updateLayerVisConfig
});
var layerConfiguratorProps = (0, _extends4.default)({}, commonConfigProp, {
onChange: updateLayerConfig
});
var layerChannelConfigProps = (0, _extends4.default)({}, commonConfigProp, {
onChange: this.props.updateLayerVisualChannelConfig
});
var renderTemplate = layer.type && '_render' + (0, _utils.capitalizeFirstLetter)(layer.type) + 'LayerConfig';
return _react2.default.createElement(
StyledLayerConfigurator,
null,
layer.layerInfoModal ? _react2.default.createElement(HowToButton, { onClick: function onClick() {
return _this2.props.openModal(layer.layerInfoModal);
} }) : null,
_react2.default.createElement(
_layerConfigGroup2.default,
{ label: 'basic' },
Object.keys(datasets).length > 1 && _react2.default.createElement(_sourceDataSelector2.default, {
datasets: datasets,
id: layer.id,
disabled: layer.tyep && config.columns,
dataId: config.dataId,
onSelect: function onSelect(value) {
return updateLayerConfig({ dataId: value });
}
}),
_react2.default.createElement(_layerTypeSelector2.default, {
layer: layer,
layerTypeOptions: layerTypeOptions,
onSelect: updateLayerType
}),
_react2.default.createElement(_layerColumnConfig2.default, {
layer: layer,
fields: fields,
fieldPairs: fieldPairs,
updateLayerConfig: updateLayerConfig,
updateLayerType: this.props.updateLayerType
})
),
this[renderTemplate] && this[renderTemplate]({
layer: layer,
visConfiguratorProps: visConfiguratorProps,
layerChannelConfigProps: layerChannelConfigProps,
layerConfiguratorProps: layerConfiguratorProps
})
);
}
}]);
return LayerConfigurator;
}(_react.Component), _class.propTypes = {
layer: _propTypes2.default.object.isRequired,
datasets: _propTypes2.default.object.isRequired,
layerTypeOptions: _propTypes2.default.arrayOf(_propTypes2.default.any).isRequired,
openModal: _propTypes2.default.func.isRequired,
updateLayerConfig: _propTypes2.default.func.isRequired,
updateLayerType: _propTypes2.default.func.isRequired,
updateLayerVisConfig: _propTypes2.default.func.isRequired,
updateLayerVisualChannelConfig: _propTypes2.default.func.isRequired
}, _temp);
/*
* Componentize config component into pure functional components
*/
exports.default = LayerConfigurator;
var StyledHowToButton = _styledComponents2.default.div(_templateObject3);
var HowToButton = exports.HowToButton = function HowToButton(_ref9) {
var onClick = _ref9.onClick;
return _react2.default.createElement(
StyledHowToButton,
null,
_react2.default.createElement(
_styledComponents3.Button,
{ secondary: true, small: true, onClick: onClick },
'How to'
)
);
};
var LayerColorSelector = exports.LayerColorSelector = function LayerColorSelector(_ref10) {
var layer = _ref10.layer,
onChange = _ref10.onChange,
label = _ref10.label;
return _react2.default.createElement(
_styledComponents3.SidePanelSection,
{ disabled: layer.config.colorField },
_react2.default.createElement(_colorSelector2.default, {
colorSets: [{
selectedColor: layer.config.color,
setColor: function setColor(rgbValue) {
return onChange({ color: rgbValue });
}
}]
})
);
};
var ArcLayerColorSelector = exports.ArcLayerColorSelector = function ArcLayerColorSelector(_ref11) {
var layer = _ref11.layer,
onChangeConfig = _ref11.onChangeConfig,
onChangeVisConfig = _ref11.onChangeVisConfig;
return _react2.default.createElement(
_styledComponents3.SidePanelSection,
null,
_react2.default.createElement(_colorSelector2.default, {
colorSets: [{
selectedColor: layer.config.color,
setColor: function setColor(rgbValue) {
return onChangeConfig({ color: rgbValue });
},
label: 'Source'
}, {
selectedColor: layer.config.visConfig.targetColor || layer.config.color,
setColor: function setColor(rgbValue) {
return onChangeVisConfig({ targetColor: rgbValue });
},
label: 'Target'
}]
})
);
};
var ColorRangeConfig = exports.ColorRangeConfig = function ColorRangeConfig(_ref12) {
var layer = _ref12.layer,
onChange = _ref12.onChange;
return _react2.default.createElement(
_styledComponents3.SidePanelSection,
null,
_react2.default.createElement(_colorSelector2.default, {
colorSets: [{
selectedColor: layer.config.visConfig.colorRange,
isRange: true,
setColor: function setColor(colorRange) {
return onChange({ colorRange: colorRange });
}
}]
})
);
};
var ChannelByValueSelector = exports.ChannelByValueSelector = function ChannelByValueSelector(_ref13) {
var layer = _ref13.layer,
channel = _ref13.channel,
onChange = _ref13.onChange,
fields = _ref13.fields,
description = _ref13.description;
var channelScaleType = channel.channelScaleType,
domain = channel.domain,
field = channel.field,
key = channel.key,
property = channel.property,
range = channel.range,
scale = channel.scale,
defaultMeasure = channel.defaultMeasure,
supportedFieldTypes = channel.supportedFieldTypes;
var channelSupportedFieldTypes = supportedFieldTypes || _defaultSettings.CHANNEL_SCALE_SUPPORTED_FIELDS[channelScaleType];
var supportedFields = fields.filter(function (_ref14) {
var type = _ref14.type;
return channelSupportedFieldTypes.includes(type);
});
var scaleOptions = layer.getScaleOptions(channel.key);
var showScale = !layer.isAggregated && layer.config[scale] && scaleOptions.length > 1;
var defaultDescription = 'Calculate ' + property + ' based on selected field';
return _react2.default.createElement(_visConfigByFieldSelector2.default, {
channel: channel.key,
description: description || defaultDescription,
domain: layer.config[domain],
fields: supportedFields,
id: layer.id,
key: key + '-channel-selector',
property: property,
placeholder: defaultMeasure || 'Select a field',
range: layer.config.visConfig[range],
scaleOptions: scaleOptions,
scaleType: scale ? layer.config[scale] : null,
selectedField: layer.config[field],
showScale: showScale,
updateField: function updateField(val) {
return onChange((0, _defineProperty3.default)({}, field, val), key);
},
updateScale: function updateScale(val) {
return onChange((0, _defineProperty3.default)({}, scale, val), key);
}
});
};
var AggrColorScaleSelector = exports.AggrColorScaleSelector = function AggrColorScaleSelector(_ref15) {
var layer = _ref15.layer,
onChange = _ref15.onChange;
var scaleOptions = layer.getScaleOptions('color');
return Array.isArray(scaleOptions) && scaleOptions.length > 1 ? _react2.default.createElement(_dimensionScaleSelector2.default, {
label: 'Color Scale',
options: scaleOptions,
scaleType: layer.config.colorScale,
onSelect: function onSelect(val) {
return onChange({ colorScale: val }, 'color');
}
}) : null;
};
var AggregationTypeSelector = exports.AggregationTypeSelector = function AggregationTypeSelector(_ref16) {
var layer = _ref16.layer,
channel = _ref16.channel,
_onChange3 = _ref16.onChange;
var field = channel.field,
aggregation = channel.aggregation,
key = channel.key;
var selectedField = layer.config[field];
var visConfig = layer.config.visConfig;
// aggregation should only be selectable when field is selected
var aggregationOptions = layer.getAggregationOptions(key);
return _react2.default.createElement(
_styledComponents3.SidePanelSection,
null,
_react2.default.createElement(
_styledComponents3.PanelLabel,
null,
'Aggregate ' + selectedField.name + ' by'
),
_react2.default.createElement(_itemSelector2.default, {
selectedItems: visConfig[aggregation],
options: aggregationOptions,
multiSelect: false,
searchable: false,
onChange: function onChange(value) {
return _onChange3({
visConfig: (0, _extends4.default)({}, layer.config.visConfig, (0, _defineProperty3.default)({}, aggregation, value))
}, channel.key);
}
})
);
};
/* eslint-enable max-params */
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3NpZGUtcGFuZWwvbGF5ZXItcGFuZWwvbGF5ZXItY29uZmlndXJhdG9yLmpzIl0sIm5hbWVzIjpbIlN0eWxlZExheWVyQ29uZmlndXJhdG9yIiwic3R5bGVkIiwiZGl2IiwiYXR0cnMiLCJjbGFzc05hbWUiLCJTdHlsZWRMYXllclZpc3VhbENvbmZpZ3VyYXRvciIsIkxheWVyQ29uZmlndXJhdG9yIiwicHJvcHMiLCJfcmVuZGVyU2NhdHRlcnBsb3RMYXllckNvbmZpZyIsImxheWVyIiwidmlzQ29uZmlndXJhdG9yUHJvcHMiLCJsYXllckNoYW5uZWxDb25maWdQcm9wcyIsImxheWVyQ29uZmlndXJhdG9yUHJvcHMiLCJjb25maWciLCJjb2xvckZpZWxkIiwidmlzdWFsQ2hhbm5lbHMiLCJjb2xvciIsIkxBWUVSX1ZJU19DT05GSUdTIiwib3BhY2l0eSIsInNpemVGaWVsZCIsInJhZGl1cyIsIkJvb2xlYW4iLCJyYWRpdXNSYW5nZSIsInZpc0NvbmZpZyIsImZpeGVkUmFkaXVzIiwic2l6ZSIsInR5cGUiLCJMQVlFUl9UWVBFUyIsInBvaW50Iiwib3V0bGluZSIsInRoaWNrbmVzcyIsInRleHRMYWJlbCIsInZpc0NvbmZpZ1NldHRpbmdzIiwiY29sb3JBZ2dyZWdhdGlvbiIsImNvbmRpdGlvbiIsImNsdXN0ZXJSYWRpdXMiLCJ3ZWlnaHQiLCJfcmVuZGVyQWdncmVnYXRpb25MYXllckNvbmZpZyIsImVuYWJsZTNkIiwiZWxldmF0aW9uQnlEZXNjcmlwdGlvbiIsImNvbG9yQnlEZXNjcmlwdGlvbiIsInBlcmNlbnRpbGUiLCJ3b3JsZFVuaXRTaXplIiwiY292ZXJhZ2UiLCJlbGV2YXRpb25TY2FsZSIsInNpemVBZ2dyZWdhdGlvbiIsImVsZXZhdGlvblBlcmNlbnRpbGUiLCJjb3ZlcmFnZUZpZWxkIiwiY292ZXJhZ2VSYW5nZSIsImVsZXZhdGlvblJhbmdlIiwiYXJncyIsIl9yZW5kZXJMaW5lTGF5ZXJDb25maWciLCJvbkNoYW5nZSIsInN0cm9rZVdpZHRoUmFuZ2UiLCJtZXRhIiwiZmVhdHVyZVR5cGVzIiwicG9seWdvbiIsImZpbGxlZCIsImxpbmUiLCJzdHJva2VkIiwiaGVpZ2h0Iiwid2lyZWZyYW1lIiwicmFkaXVzRmllbGQiLCJkYXRhc2V0cyIsInVwZGF0ZUxheWVyQ29uZmlnIiwibGF5ZXJUeXBlT3B0aW9ucyIsInVwZGF0ZUxheWVyVHlwZSIsImRhdGFJZCIsImZpZWxkcyIsImZpZWxkUGFpcnMiLCJjb21tb25Db25maWdQcm9wIiwidXBkYXRlTGF5ZXJWaXNDb25maWciLCJ1cGRhdGVMYXllclZpc3VhbENoYW5uZWxDb25maWciLCJyZW5kZXJUZW1wbGF0ZSIsImxheWVySW5mb01vZGFsIiwib3Blbk1vZGFsIiwiT2JqZWN0Iiwia2V5cyIsImxlbmd0aCIsImlkIiwidHllcCIsImNvbHVtbnMiLCJ2YWx1ZSIsIkNvbXBvbmVudCIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsIm9iamVjdCIsImlzUmVxdWlyZWQiLCJhcnJheU9mIiwiYW55IiwiZnVuYyIsIlN0eWxlZEhvd1RvQnV0dG9uIiwiSG93VG9CdXR0b24iLCJvbkNsaWNrIiwiTGF5ZXJDb2xvclNlbGVjdG9yIiwibGFiZWwiLCJzZWxlY3RlZENvbG9yIiwic2V0Q29sb3IiLCJyZ2JWYWx1ZSIsIkFyY0xheWVyQ29sb3JTZWxlY3RvciIsIm9uQ2hhbmdlQ29uZmlnIiwib25DaGFuZ2VWaXNDb25maWciLCJ0YXJnZXRDb2xvciIsIkNvbG9yUmFuZ2VDb25maWciLCJjb2xvclJhbmdlIiwiaXNSYW5nZSIsIkNoYW5uZWxCeVZhbHVlU2VsZWN0b3IiLCJjaGFubmVsIiwiZGVzY3JpcHRpb24iLCJjaGFubmVsU2NhbGVUeXBlIiwiZG9tYWluIiwiZmllbGQiLCJrZXkiLCJwcm9wZXJ0eSIsInJhbmdlIiwic2NhbGUiLCJkZWZhdWx0TWVhc3VyZSIsInN1cHBvcnRlZEZpZWxkVHlwZXMiLCJjaGFubmVsU3VwcG9ydGVkRmllbGRUeXBlcyIsIkNIQU5ORUxfU0NBTEVfU1VQUE9SVEVEX0ZJRUxEUyIsInN1cHBvcnRlZEZpZWxkcyIsImZpbHRlciIsImluY2x1ZGVzIiwic2NhbGVPcHRpb25zIiwiZ2V0U2NhbGVPcHRpb25zIiwic2hvd1NjYWxlIiwiaXNBZ2dyZWdhdGVkIiwiZGVmYXVsdERlc2NyaXB0aW9uIiwidmFsIiwiQWdnckNvbG9yU2NhbGVTZWxlY3RvciIsIkFycmF5IiwiaXNBcnJheSIsImNvbG9yU2NhbGUiLCJBZ2dyZWdhdGlvblR5cGVTZWxlY3RvciIsImFnZ3JlZ2F0aW9uIiwic2VsZWN0ZWRGaWVsZCIsImFnZ3JlZ2F0aW9uT3B0aW9ucyIsImdldEFnZ3JlZ2F0aW9uT3B0aW9ucyIsIm5hbWUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsyS0FBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFFQTs7QUFLQTs7OztBQUVBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBRUE7O0FBRUE7O0FBRUE7Ozs7QUFLQSxJQUFNQSwwQkFBMEJDLDJCQUFPQyxHQUFQLENBQVdDLEtBQVgsQ0FBaUI7QUFDL0NDLGFBQVc7QUFEb0MsQ0FBakIsQ0FBMUIsaUJBQU47O0FBT0EsSUFBTUMsZ0NBQWdDSiwyQkFBT0MsR0FBUCxDQUFXQyxLQUFYLENBQWlCO0FBQ3JEQyxhQUFXO0FBRDBDLENBQWpCLENBQWhDLGtCQUFOOztJQU1xQkUsaUI7Ozs7Ozs7Ozs7NENBWUtDLEssRUFBTztBQUM3QixhQUFPLEtBQUtDLDZCQUFMLENBQW1DRCxLQUFuQyxDQUFQO0FBQ0Q7OzsyQ0FFc0JBLEssRUFBTztBQUM1QixhQUFPLEtBQUtDLDZCQUFMLENBQW1D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