kepler.gl.geoiq
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
727 lines (647 loc) • 120 kB
JavaScript
"use strict";
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.BoundaryTypeSelector = exports.AggregationTypeSelector = exports.AggrColorScaleSelector = exports.ChannelByValueSelector = exports.ColorRangeConfig = exports.ArcLayerColorSelector = exports.LayerColorSelector = exports.HowToButton = exports["default"] = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
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 _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
var _react = _interopRequireWildcard(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _styledComponents = _interopRequireDefault(require("styled-components"));
var _styledComponents2 = require("../../common/styled-components");
var _itemSelector = _interopRequireDefault(require("../../common/item-selector/item-selector"));
var _visConfigByFieldSelector = _interopRequireDefault(require("./vis-config-by-field-selector"));
var _layerColumnConfig = _interopRequireDefault(require("./layer-column-config"));
var _layerTypeSelector = _interopRequireDefault(require("./layer-type-selector"));
var _dimensionScaleSelector = _interopRequireDefault(require("./dimension-scale-selector"));
var _colorSelector = _interopRequireDefault(require("./color-selector"));
var _sourceDataSelector = _interopRequireDefault(require("../source-data-selector"));
var _visConfigSwitch = _interopRequireDefault(require("./vis-config-switch"));
var _visConfigSlider = _interopRequireDefault(require("./vis-config-slider"));
var _layerConfigGroup = _interopRequireWildcard(require("./layer-config-group"));
var _textLabelPanel = _interopRequireDefault(require("./text-label-panel"));
var _layerFactory = require("../../../layers/layer-factory");
var _utils = require("../../../utils/utils");
var _defaultSettings = require("../../../constants/default-settings");
function _templateObject3() {
var data = (0, _taggedTemplateLiteral2["default"])(["\n position: absolute;\n right: 12px;\n top: -4px;\n"]);
_templateObject3 = function _templateObject3() {
return data;
};
return data;
}
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; }
function _templateObject2() {
var data = (0, _taggedTemplateLiteral2["default"])(["\n margin-top: 12px;\n"]);
_templateObject2 = function _templateObject2() {
return data;
};
return data;
}
function _templateObject() {
var data = (0, _taggedTemplateLiteral2["default"])(["\n position: relative;\n margin-top: 12px;\n"]);
_templateObject = function _templateObject() {
return data;
};
return data;
}
var StyledLayerConfigurator = _styledComponents["default"].div.attrs({
className: 'layer-panel__config'
})(_templateObject());
var StyledLayerVisualConfigurator = _styledComponents["default"].div.attrs({
className: 'layer-panel__config__visualC-config'
})(_templateObject2());
var LayerConfigurator =
/*#__PURE__*/
function (_Component) {
(0, _inherits2["default"])(LayerConfigurator, _Component);
function LayerConfigurator() {
(0, _classCallCheck2["default"])(this, LayerConfigurator);
return (0, _possibleConstructorReturn2["default"])(this, (0, _getPrototypeOf2["default"])(LayerConfigurator).apply(this, arguments));
}
(0, _createClass2["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 _react["default"].createElement(StyledLayerVisualConfigurator, null, _react["default"].createElement(_layerConfigGroup["default"], {
label: 'color',
collapsible: true
}, layer.config.colorField ? _react["default"].createElement(ColorRangeConfig, visConfiguratorProps) : _react["default"].createElement(LayerColorSelector, layerConfiguratorProps), _react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, _react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
channel: layer.visualChannels.color
}, layerChannelConfigProps)), _react["default"].createElement(_visConfigSlider["default"], (0, _extends2["default"])({}, _layerFactory.LAYER_VIS_CONFIGS.opacity, visConfiguratorProps)))), _react["default"].createElement(_layerConfigGroup["default"], {
label: 'radius',
collapsible: true
}, !layer.config.sizeField ? _react["default"].createElement(_visConfigSlider["default"], (0, _extends2["default"])({}, _layerFactory.LAYER_VIS_CONFIGS.radius, visConfiguratorProps, {
label: false,
disabled: Boolean(layer.config.sizeField)
})) : _react["default"].createElement(_visConfigSlider["default"], (0, _extends2["default"])({}, _layerFactory.LAYER_VIS_CONFIGS.radiusRange, visConfiguratorProps, {
label: false,
disabled: !layer.config.sizeField || layer.config.visConfig.fixedRadius
})), _react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, _react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
channel: layer.visualChannels.size
}, layerChannelConfigProps)), layer.config.sizeField ? _react["default"].createElement(_visConfigSwitch["default"], (0, _extends2["default"])({}, _layerFactory.LAYER_VIS_CONFIGS.fixedRadius, visConfiguratorProps, {
disabled: !layer.config.sizeField
})) : null)), layer.type === _defaultSettings.LAYER_TYPES.point ? _react["default"].createElement(_layerConfigGroup["default"], (0, _extends2["default"])({}, _layerFactory.LAYER_VIS_CONFIGS.outline, visConfiguratorProps), _react["default"].createElement(_visConfigSlider["default"], (0, _extends2["default"])({}, _layerFactory.LAYER_VIS_CONFIGS.thickness, visConfiguratorProps, {
label: false,
disabled: !layer.config.visConfig.outline
}))) : null, _react["default"].createElement(_textLabelPanel["default"], {
visConfiguratorProps: visConfiguratorProps,
layerConfiguratorProps: layerConfiguratorProps,
textLabel: layer.config.textLabel
}));
}
}, {
key: "_renderClusterLayerConfig",
value: function _renderClusterLayerConfig(_ref2) {
var layer = _ref2.layer,
visConfiguratorProps = _ref2.visConfiguratorProps,
layerConfiguratorProps = _ref2.layerConfiguratorProps,
layerChannelConfigProps = _ref2.layerChannelConfigProps;
return _react["default"].createElement(StyledLayerVisualConfigurator, null, _react["default"].createElement(_layerConfigGroup["default"], {
label: 'color',
collapsible: true
}, _react["default"].createElement(ColorRangeConfig, visConfiguratorProps), _react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, _react["default"].createElement(AggrColorScaleSelector, layerConfiguratorProps), _react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
channel: layer.visualChannels.color
}, layerChannelConfigProps)), layer.visConfigSettings.colorAggregation.condition(layer.config) ? _react["default"].createElement(AggregationTypeSelector, (0, _extends2["default"])({}, layer.visConfigSettings.colorAggregation, layerChannelConfigProps, {
channel: layer.visualChannels.color
})) : null, _react["default"].createElement(_visConfigSlider["default"], (0, _extends2["default"])({}, layer.visConfigSettings.opacity, visConfiguratorProps)))), _react["default"].createElement(_layerConfigGroup["default"], {
label: 'radius',
collapsible: true
}, _react["default"].createElement(_visConfigSlider["default"], (0, _extends2["default"])({}, layer.visConfigSettings.clusterRadius, visConfiguratorProps)), _react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, _react["default"].createElement(_visConfigSlider["default"], (0, _extends2["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 _react["default"].createElement(StyledLayerVisualConfigurator, null, _react["default"].createElement(_layerConfigGroup["default"], {
label: 'color',
collapsible: true
}, _react["default"].createElement(ColorRangeConfig, visConfiguratorProps), _react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, _react["default"].createElement(_visConfigSlider["default"], (0, _extends2["default"])({}, layer.visConfigSettings.opacity, visConfiguratorProps)))), _react["default"].createElement(_layerConfigGroup["default"], {
label: 'radius'
}, _react["default"].createElement(_visConfigSlider["default"], (0, _extends2["default"])({}, layer.visConfigSettings.radius, visConfiguratorProps, {
label: false
}))), _react["default"].createElement(_layerConfigGroup["default"], {
label: 'weight'
}, _react["default"].createElement(ChannelByValueSelector, (0, _extends2["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 _react["default"].createElement(StyledLayerVisualConfigurator, null, _react["default"].createElement(_layerConfigGroup["default"], {
label: 'color',
collapsible: true
}, _react["default"].createElement(ColorRangeConfig, visConfiguratorProps), _react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, _react["default"].createElement(AggrColorScaleSelector, layerConfiguratorProps), _react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
channel: layer.visualChannels.color
}, layerChannelConfigProps)), layer.visConfigSettings.colorAggregation.condition(layer.config) ? _react["default"].createElement(AggregationTypeSelector, (0, _extends2["default"])({}, layer.visConfigSettings.colorAggregation, layerChannelConfigProps, {
descreiption: colorByDescription,
channel: layer.visualChannels.color
})) : null, layer.visConfigSettings.percentile && layer.visConfigSettings.percentile.condition(layer.config) ? _react["default"].createElement(_visConfigSlider["default"], (0, _extends2["default"])({}, layer.visConfigSettings.percentile, visConfiguratorProps)) : null, _react["default"].createElement(_visConfigSlider["default"], (0, _extends2["default"])({}, layer.visConfigSettings.opacity, visConfiguratorProps)))), _react["default"].createElement(_layerConfigGroup["default"], {
label: 'radius',
collapsible: true
}, _react["default"].createElement(_visConfigSlider["default"], (0, _extends2["default"])({}, layer.visConfigSettings.worldUnitSize, visConfiguratorProps)), _react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, _react["default"].createElement(_visConfigSlider["default"], (0, _extends2["default"])({}, layer.visConfigSettings.coverage, visConfiguratorProps)))), layer.visConfigSettings.enable3d ? _react["default"].createElement(_layerConfigGroup["default"], (0, _extends2["default"])({}, layer.visConfigSettings.enable3d, visConfiguratorProps, {
collapsible: true
}), _react["default"].createElement(_visConfigSlider["default"], (0, _extends2["default"])({}, layer.visConfigSettings.elevationScale, visConfiguratorProps)), _react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, _react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({}, layerChannelConfigProps, {
channel: layer.visualChannels.size,
description: elevationByDescription,
disabled: !enable3d
})), layer.visConfigSettings.sizeAggregation.condition(layer.config) ? _react["default"].createElement(AggregationTypeSelector, (0, _extends2["default"])({}, layer.visConfigSettings.sizeAggregation, layerChannelConfigProps, {
channel: layer.visualChannels.size
})) : null, layer.visConfigSettings.elevationPercentile.condition(layer.config) ? _react["default"].createElement(_visConfigSlider["default"], (0, _extends2["default"])({}, layer.visConfigSettings.elevationPercentile, visConfiguratorProps)) : null)) : null);
} // 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 _react["default"].createElement(StyledLayerVisualConfigurator, null, _react["default"].createElement(_layerConfigGroup["default"], {
label: 'color',
collapsible: true
}, layer.config.colorField ? _react["default"].createElement(ColorRangeConfig, visConfiguratorProps) : _react["default"].createElement(LayerColorSelector, layerConfiguratorProps), _react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, _react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
channel: layer.visualChannels.color
}, layerChannelConfigProps)), _react["default"].createElement(_visConfigSlider["default"], (0, _extends2["default"])({}, _layerFactory.LAYER_VIS_CONFIGS.opacity, visConfiguratorProps)))), _react["default"].createElement(_layerConfigGroup["default"], {
label: 'coverage',
collapsible: true
}, !layer.config.coverageField ? _react["default"].createElement(_visConfigSlider["default"], (0, _extends2["default"])({}, layer.visConfigSettings.coverage, visConfiguratorProps, {
label: false
})) : _react["default"].createElement(_visConfigSlider["default"], (0, _extends2["default"])({}, layer.visConfigSettings.coverageRange, visConfiguratorProps, {
label: false
})), _react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, _react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
channel: layer.visualChannels.coverage
}, layerChannelConfigProps)))), _react["default"].createElement(_layerConfigGroup["default"], (0, _extends2["default"])({}, _layerFactory.LAYER_VIS_CONFIGS.enable3d, visConfiguratorProps, {
collapsible: true
}), _react["default"].createElement(_visConfigSlider["default"], (0, _extends2["default"])({}, _layerFactory.LAYER_VIS_CONFIGS.elevationRange, visConfiguratorProps, {
label: false
})), _react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, _react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
channel: layer.visualChannels.size
}, layerChannelConfigProps)))));
}
}, {
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 _react["default"].createElement(StyledLayerVisualConfigurator, null, _react["default"].createElement(_layerConfigGroup["default"], {
label: 'color',
collapsible: true
}, layer.config.colorField ? _react["default"].createElement(ColorRangeConfig, visConfiguratorProps) : _react["default"].createElement(ArcLayerColorSelector, {
layer: layer,
onChangeConfig: layerConfiguratorProps.onChange,
onChangeVisConfig: visConfiguratorProps.onChange
}), _react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, _react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
channel: layer.visualChannels.color
}, layerChannelConfigProps)), _react["default"].createElement(_visConfigSlider["default"], (0, _extends2["default"])({}, _layerFactory.LAYER_VIS_CONFIGS.opacity, visConfiguratorProps)))), _react["default"].createElement(_layerConfigGroup["default"], {
label: 'stroke',
collapsible: true
}, layer.config.sizeField ? _react["default"].createElement(_visConfigSlider["default"], (0, _extends2["default"])({}, _layerFactory.LAYER_VIS_CONFIGS.strokeWidthRange, visConfiguratorProps, {
disabled: !layer.config.sizeField,
label: false
})) : _react["default"].createElement(_visConfigSlider["default"], (0, _extends2["default"])({}, _layerFactory.LAYER_VIS_CONFIGS.thickness, visConfiguratorProps, {
label: false
})), _react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, _react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
channel: layer.visualChannels.size
}, layerChannelConfigProps)))));
}
}, {
key: "_renderBoundaryLayerConfig",
value: function _renderBoundaryLayerConfig(props) {
return this._renderGeoBoundaryLayerConfig(props);
}
}, {
key: "_renderGeojsonLayerConfig",
value: function _renderGeojsonLayerConfig(props) {
return this._renderGeoLayerConfig(props);
}
}, {
key: "_renderPincodeLayerConfig",
value: function _renderPincodeLayerConfig(props) {
return this._renderGeoBoundaryLayerConfig(props);
}
}, {
key: "_renderGeoLayerConfig",
value: function _renderGeoLayerConfig(_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 === void 0 ? {} : _layer$meta$featureTy,
visConfig = layer.config.visConfig;
return _react["default"].createElement(StyledLayerVisualConfigurator, null, _react["default"].createElement(_layerConfigGroup["default"], {
label: 'color',
collapsible: true
}, layer.config.colorField ? _react["default"].createElement(ColorRangeConfig, visConfiguratorProps) : _react["default"].createElement(LayerColorSelector, layerConfiguratorProps), _react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, _react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
channel: layer.visualChannels.color
}, layerChannelConfigProps)), _react["default"].createElement(_visConfigSlider["default"], (0, _extends2["default"])({}, _layerFactory.LAYER_VIS_CONFIGS.opacity, visConfiguratorProps)))), featureTypes.polygon ? _react["default"].createElement(_layerConfigGroup["default"], (0, _extends2["default"])({
label: 'fill'
}, visConfiguratorProps, _layerFactory.LAYER_VIS_CONFIGS.filled)) : null, featureTypes.line || featureTypes.polygon ? _react["default"].createElement(_layerConfigGroup["default"], (0, _extends2["default"])({
label: "stroke"
}, visConfiguratorProps, featureTypes.polygon ? _layerFactory.LAYER_VIS_CONFIGS.stroked : {}, {
collapsible: true
}), layer.config.sizeField ? _react["default"].createElement(_visConfigSlider["default"], (0, _extends2["default"])({}, _layerFactory.LAYER_VIS_CONFIGS.strokeWidthRange, visConfiguratorProps, {
label: false
})) : _react["default"].createElement(_visConfigSlider["default"], (0, _extends2["default"])({}, _layerFactory.LAYER_VIS_CONFIGS.thickness, visConfiguratorProps, {
label: false
})), _react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, _react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
channel: layer.visualChannels.size
}, layerChannelConfigProps)))) : null, featureTypes.polygon && visConfig.filled ? _react["default"].createElement(_layerConfigGroup["default"], (0, _extends2["default"])({}, visConfiguratorProps, _layerFactory.LAYER_VIS_CONFIGS.enable3d, {
collapsible: true
}), _react["default"].createElement(_visConfigSlider["default"], (0, _extends2["default"])({}, _layerFactory.LAYER_VIS_CONFIGS.elevationScale, visConfiguratorProps, {
label: false
})), _react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, _react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
channel: layer.visualChannels.height
}, layerChannelConfigProps)), _react["default"].createElement(_visConfigSwitch["default"], (0, _extends2["default"])({}, visConfiguratorProps, _layerFactory.LAYER_VIS_CONFIGS.wireframe)))) : null, featureTypes.point ? _react["default"].createElement(_layerConfigGroup["default"], {
label: 'radius',
collapsible: true
}, !layer.config.radiusField ? _react["default"].createElement(_visConfigSlider["default"], (0, _extends2["default"])({}, _layerFactory.LAYER_VIS_CONFIGS.radius, visConfiguratorProps, {
label: false,
disabled: Boolean(layer.config.radiusField)
})) : _react["default"].createElement(_visConfigSlider["default"], (0, _extends2["default"])({}, _layerFactory.LAYER_VIS_CONFIGS.radiusRange, visConfiguratorProps, {
label: false,
disabled: !layer.config.radiusField
})), _react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, _react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
channel: layer.visualChannels.radius
}, layerChannelConfigProps)))) : null);
}
}, {
key: "_renderGeoBoundaryLayerConfig",
value: function _renderGeoBoundaryLayerConfig(_ref8) {
var layer = _ref8.layer,
visConfiguratorProps = _ref8.visConfiguratorProps,
layerConfiguratorProps = _ref8.layerConfiguratorProps,
layerChannelConfigProps = _ref8.layerChannelConfigProps;
var _layer$meta$featureTy2 = layer.meta.featureTypes,
featureTypes = _layer$meta$featureTy2 === void 0 ? {} : _layer$meta$featureTy2,
visConfig = layer.config.visConfig;
var enable3d = 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 _react["default"].createElement(StyledLayerVisualConfigurator, null, _react["default"].createElement(_layerConfigGroup["default"], {
label: layer.type === 'boundary' ? 'boundary' : ''
}, _react["default"].createElement(BoundaryTypeSelector, (0, _extends2["default"])({}, layer.visConfigSettings.colorAggregation, layerConfiguratorProps, {
descreiption: colorByDescription,
channel: layer.visualChannels.color
}))), _react["default"].createElement(_layerConfigGroup["default"], {
label: 'color',
collapsible: true
}, _react["default"].createElement(ColorRangeConfig, visConfiguratorProps), _react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, _react["default"].createElement(AggrColorScaleSelector, layerConfiguratorProps), _react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
channel: layer.visualChannels.color
}, layerChannelConfigProps)), layer.visConfigSettings.colorAggregation.condition(layer.config) ? _react["default"].createElement(AggregationTypeSelector, (0, _extends2["default"])({}, layer.visConfigSettings.colorAggregation, layerChannelConfigProps, {
descreiption: colorByDescription,
channel: layer.visualChannels.color
})) : null, _react["default"].createElement(_visConfigSlider["default"], (0, _extends2["default"])({}, _layerFactory.LAYER_VIS_CONFIGS.opacity, visConfiguratorProps)))), featureTypes.polygon ? _react["default"].createElement(_layerConfigGroup["default"], (0, _extends2["default"])({
label: 'fill'
}, visConfiguratorProps, _layerFactory.LAYER_VIS_CONFIGS.filled)) : null, featureTypes.line || featureTypes.polygon ? _react["default"].createElement(_layerConfigGroup["default"], (0, _extends2["default"])({
label: "stroke"
}, visConfiguratorProps, featureTypes.polygon ? _layerFactory.LAYER_VIS_CONFIGS.stroked : {}, {
collapsible: true
}), _react["default"].createElement(_visConfigSlider["default"], (0, _extends2["default"])({}, _layerFactory.LAYER_VIS_CONFIGS.thickness, visConfiguratorProps, {
label: false
}))) : null, featureTypes.polygon && visConfig.filled ? _react["default"].createElement(_layerConfigGroup["default"], (0, _extends2["default"])({}, visConfiguratorProps, _layerFactory.LAYER_VIS_CONFIGS.enable3d, {
collapsible: true
}), _react["default"].createElement(_visConfigSlider["default"], (0, _extends2["default"])({}, _layerFactory.LAYER_VIS_CONFIGS.elevationScale, visConfiguratorProps, {
label: false
})), _react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, _react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({}, layerChannelConfigProps, {
channel: layer.visualChannels.height,
description: elevationByDescription,
disabled: !enable3d
})), layer.visConfigSettings.heightAggregation.condition(layer.config) ? _react["default"].createElement(AggregationTypeSelector, (0, _extends2["default"])({}, layer.visConfigSettings.sizeAggregation, layerChannelConfigProps, {
channel: layer.visualChannels.height
})) : null)) : null, featureTypes.point ? _react["default"].createElement(_layerConfigGroup["default"], {
label: 'radius',
collapsible: true
}, !layer.config.radiusField ? _react["default"].createElement(_visConfigSlider["default"], (0, _extends2["default"])({}, _layerFactory.LAYER_VIS_CONFIGS.radius, visConfiguratorProps, {
label: false,
disabled: Boolean(layer.config.radiusField)
})) : _react["default"].createElement(_visConfigSlider["default"], (0, _extends2["default"])({}, _layerFactory.LAYER_VIS_CONFIGS.radiusRange, visConfiguratorProps, {
label: false,
disabled: !layer.config.radiusField
})), _react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, _react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
channel: layer.visualChannels.radius
}, layerChannelConfigProps)))) : null);
}
}, {
key: "render",
value: function render() {
var _this = this;
var _this$props = this.props,
layer = _this$props.layer,
datasets = _this$props.datasets,
updateLayerConfig = _this$props.updateLayerConfig,
layerTypeOptions = _this$props.layerTypeOptions,
updateLayerType = _this$props.updateLayerType;
var _ref9 = layer.config.dataId ? datasets[layer.config.dataId] : {},
_ref9$fields = _ref9.fields,
fields = _ref9$fields === void 0 ? [] : _ref9$fields,
fieldPairs = _ref9.fieldPairs;
var config = layer.config;
var commonConfigProp = {
layer: layer,
fields: fields
};
var visConfiguratorProps = _objectSpread({}, commonConfigProp, {
onChange: this.props.updateLayerVisConfig
});
var layerConfiguratorProps = _objectSpread({}, commonConfigProp, {
onChange: updateLayerConfig
});
var layerChannelConfigProps = _objectSpread({}, commonConfigProp, {
onChange: this.props.updateLayerVisualChannelConfig
});
var renderTemplate = layer.type && "_render".concat((0, _utils.capitalizeFirstLetter)(layer.type), "LayerConfig");
return _react["default"].createElement(StyledLayerConfigurator, null, layer.layerInfoModal ? _react["default"].createElement(HowToButton, {
onClick: function onClick() {
return _this.props.openModal(layer.layerInfoModal);
}
}) : null, _react["default"].createElement(_layerConfigGroup["default"], {
label: 'basic',
collapsible: true,
expanded: !layer.hasAllColumns()
}, _react["default"].createElement(_layerTypeSelector["default"], {
layer: layer,
layerTypeOptions: layerTypeOptions,
onSelect: updateLayerType
}), _react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, Object.keys(datasets).length > 1 && _react["default"].createElement(_sourceDataSelector["default"], {
datasets: datasets,
id: layer.id,
disabled: layer.tyep && config.columns,
dataId: config.dataId,
onSelect: function onSelect(value) {
return updateLayerConfig({
dataId: value
});
}
}), _react["default"].createElement(_layerColumnConfig["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);
/*
* Componentize config component into pure functional components
*/
exports["default"] = LayerConfigurator;
(0, _defineProperty2["default"])(LayerConfigurator, "propTypes", {
layer: _propTypes["default"].object.isRequired,
datasets: _propTypes["default"].object.isRequired,
layerTypeOptions: _propTypes["default"].arrayOf(_propTypes["default"].any).isRequired,
openModal: _propTypes["default"].func.isRequired,
updateLayerConfig: _propTypes["default"].func.isRequired,
updateLayerType: _propTypes["default"].func.isRequired,
updateLayerVisConfig: _propTypes["default"].func.isRequired,
updateLayerVisualChannelConfig: _propTypes["default"].func.isRequired,
updateLayerData: _propTypes["default"].func.isRequired
});
var StyledHowToButton = _styledComponents["default"].div(_templateObject3());
var HowToButton = function HowToButton(_ref10) {
var onClick = _ref10.onClick;
return _react["default"].createElement(StyledHowToButton, null, _react["default"].createElement(_styledComponents2.Button, {
link: true,
small: true,
onClick: onClick
}, "How to"));
};
exports.HowToButton = HowToButton;
var LayerColorSelector = function LayerColorSelector(_ref11) {
var layer = _ref11.layer,
onChange = _ref11.onChange,
label = _ref11.label;
return _react["default"].createElement(_styledComponents2.SidePanelSection, {
disabled: layer.config.colorField
}, _react["default"].createElement(_colorSelector["default"], {
colorSets: [{
selectedColor: layer.config.color,
setColor: function setColor(rgbValue) {
return onChange({
color: rgbValue
});
}
}]
}));
};
exports.LayerColorSelector = LayerColorSelector;
var ArcLayerColorSelector = function ArcLayerColorSelector(_ref12) {
var layer = _ref12.layer,
onChangeConfig = _ref12.onChangeConfig,
onChangeVisConfig = _ref12.onChangeVisConfig;
return _react["default"].createElement(_styledComponents2.SidePanelSection, null, _react["default"].createElement(_colorSelector["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'
}]
}));
};
exports.ArcLayerColorSelector = ArcLayerColorSelector;
var ColorRangeConfig = function ColorRangeConfig(_ref13) {
var layer = _ref13.layer,
onChange = _ref13.onChange;
return _react["default"].createElement(_styledComponents2.SidePanelSection, null, _react["default"].createElement(_colorSelector["default"], {
colorSets: [{
selectedColor: layer.config.visConfig.colorRange,
isRange: true,
setColor: function setColor(colorRange) {
return onChange({
colorRange: colorRange
});
}
}]
}));
};
exports.ColorRangeConfig = ColorRangeConfig;
var ChannelByValueSelector = function ChannelByValueSelector(_ref14) {
var layer = _ref14.layer,
channel = _ref14.channel,
onChange = _ref14.onChange,
fields = _ref14.fields,
description = _ref14.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 (_ref15) {
var type = _ref15.type;
return channelSupportedFieldTypes.includes(type);
});
var scaleOptions = layer.getScaleOptions(channel.key);
var showScale = !layer.isAggregated && layer.config[scale] && scaleOptions.length > 1;
var defaultDescription = "Calculate ".concat(property, " based on selected field");
return _react["default"].createElement(_visConfigByFieldSelector["default"], {
channel: channel.key,
description: description || defaultDescription,
domain: layer.config[domain],
fields: supportedFields,
id: layer.id,
key: "".concat(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, _defineProperty2["default"])({}, field, val), key);
},
updateScale: function updateScale(val) {
return onChange((0, _defineProperty2["default"])({}, scale, val), key);
}
});
};
exports.ChannelByValueSelector = ChannelByValueSelector;
var AggrColorScaleSelector = function AggrColorScaleSelector(_ref16) {
var layer = _ref16.layer,
onChange = _ref16.onChange;
var scaleOptions = layer.getScaleOptions('color');
return Array.isArray(scaleOptions) && scaleOptions.length > 1 ? _react["default"].createElement(_dimensionScaleSelector["default"], {
label: "Color Scale",
options: scaleOptions,
scaleType: layer.config.colorScale,
onSelect: function onSelect(val) {
return onChange({
colorScale: val
}, 'color');
}
}) : null;
};
exports.AggrColorScaleSelector = AggrColorScaleSelector;
var AggregationTypeSelector = function AggregationTypeSelector(_ref17) {
var layer = _ref17.layer,
channel = _ref17.channel,
_onChange3 = _ref17.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 _react["default"].createElement(_styledComponents2.SidePanelSection, null, _react["default"].createElement(_styledComponents2.PanelLabel, null, "Aggregate ".concat(selectedField.name, " by")), _react["default"].createElement(_itemSelector["default"], {
selectedItems: visConfig[aggregation],
options: aggregationOptions,
multiSelect: false,
searchable: false,
onChange: function onChange(value) {
return _onChange3({
visConfig: _objectSpread({}, layer.config.visConfig, (0, _defineProperty2["default"])({}, aggregation, value))
}, channel.key);
}
}));
};
exports.AggregationTypeSelector = AggregationTypeSelector;
var BoundaryTypeSelector = function BoundaryTypeSelector(_ref18) {
var layer = _ref18.layer,
channel = _ref18.channel,
_onChange4 = _ref18.onChange;
var field = channel.field,
aggregation = channel.aggregation,
key = channel.key; // const selectedField = layer.config[field];
var boundaryAggregation = layer.config.boundaryAggregation;
if (layer.type === 'pincode' && !boundaryAggregation) {
console.log('is this getting updated everytime ');
_onChange4({
boundaryAggregation: 'Pincode'
});
return null;
} else if (layer.type === 'pincode') {
return null;
} // const aggregationOptions = layer.getAggregationOptions(key);
var boundaryAggregationOptions = ['Locality', 'Pincode', 'Taluk', 'District', 'State'];
return _react["default"].createElement(_styledComponents2.SidePanelSection, null, _react["default"].createElement(_itemSelector["default"] // selectedItems={visConfig[boundaryAggregation]}
, {
placeholder: boundaryAggregation ? boundaryAggregation : 'Select boundary type',
options: boundaryAggregationOptions,
multiSelect: false,
searchable: false,
onChange: function onChange(value) {
return _onChange4({
boundaryAggregation: value,
apiCallRequest: true,
apiCallLoader: true
}, channel.key);
}
}));
};
/* eslint-enable max-params */
exports.BoundaryTypeSelector = BoundaryTypeSelector;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3NpZGUtcGFuZWwvbGF5ZXItcGFuZWwvbGF5ZXItY29uZmlndXJhdG9yLmpzIl0sIm5hbWVzIjpbIlN0eWxlZExheWVyQ29uZmlndXJhdG9yIiwic3R5bGVkIiwiZGl2IiwiYXR0cnMiLCJjbGFzc05hbWUiLCJTdHlsZWRMYXllclZpc3VhbENvbmZpZ3VyYXRvciIsIkxheWVyQ29uZmlndXJhdG9yIiwicHJvcHMiLCJfcmVuZGVyU2NhdHRlcnBsb3RMYXllckNvbmZpZyIsImxheWVyIiwidmlzQ29uZmlndXJhdG9yUHJvcHMiLCJsYXllckNoYW5uZWxDb25maWdQcm9wcyIsImxheWVyQ29uZmlndXJhdG9yUHJvcHMiLCJjb25maWciLCJjb2xvckZpZWxkIiwidmlzdWFsQ2hhbm5lbHMiLCJjb2xvciIsIkxBWUVSX1ZJU19DT05GSUdTIiwib3BhY2l0eSIsInNpemVGaWVsZCIsInJhZGl1cyIsIkJvb2xlYW4iLCJyYWRpdXNSYW5nZSIsInZpc0NvbmZpZyIsImZpeGVkUmFkaXVzIiwic2l6ZSIsInR5cGUiLCJMQVlFUl9UWVBFUyIsInBvaW50Iiwib3V0bGluZSIsInRoaWNrbmVzcyIsInRleHRMYWJlbCIsInZpc0NvbmZpZ1NldHRpbmdzIiwiY29sb3JBZ2dyZWdhdGlvbiIsImNvbmRpdGlvbiIsImNsdXN0ZXJSYWRpdXMiLCJ3ZWlnaHQiLCJfcmVuZGVyQWdncmVnYXRpb25MYXllckNvbmZpZyIsImVuYWJsZTNkIiwiZWxldmF0aW9uQnlEZXNjcmlwdGlvbiIsImNvbG9yQnlEZXNjcmlwdGlvbiIsInBlcmNlbnRpbGUiLCJ3b3JsZFVuaXRTaXplIiwiY292ZXJhZ2UiLCJlbGV2YXRpb25TY2FsZSIsInNpemVBZ2dyZWdhdGlvbiIsImVsZXZhdGlvblBlcmNlbnRpbGUiLCJjb3ZlcmFnZUZpZWxkIiwiY292ZXJhZ2VSYW5nZSIsImVsZXZhdGlvblJhbmdlIiwiYXJncyIsIl9yZW5kZXJMaW5lTGF5ZXJDb25maWciLCJvbkNoYW5nZSIsInN0cm9rZVdpZHRoUmFuZ2UiLCJfcmVuZGVyR2VvQm91bmRhcnlMYXllckNvbmZpZyIsIl9yZW5kZXJHZW9MYXllckNvbmZpZyIsIm1ldGEiLCJmZWF0dXJlVHlwZXMiLCJwb2x5Z29uIiwiZmlsbGVkIiwibGluZSIsInN0cm9rZWQiLCJoZWlnaHQiLCJ3aXJlZnJhbWUiLCJyYWRpdXNGaWVsZCIsImhlaWdodEFnZ3JlZ2F0aW9uIiwiZGF0YXNldHMiLCJ1cGRhdGVMYXllckNvbmZpZyIsImxheWVyVHlwZU9wdGlvbnMiLCJ1cGRhdGVMYXllclR5cGUiLCJkYXRhSWQiLCJmaWVsZHMiLCJmaWVsZFBhaXJzIiwiY29tbW9uQ29uZmlnUHJvcCIsInVwZGF0ZUxheWVyVmlzQ29uZmlnIiwidXBkYXRlTGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnIiwicmVuZGVyVGVtcGxhdGUiLCJsYXllckluZm9Nb2RhbCIsIm9wZW5Nb2RhbCIsImhhc0FsbENvbHVtbnMiLCJPYmplY3QiLCJrZXlzIiwibGVuZ3RoIiwiaWQiLCJ0eWVwIiwiY29sdW1ucyIsInZhbHVlIiwiQ29tcG9uZW50IiwiUHJvcFR5cGVzIiwib2JqZWN0IiwiaXNSZXF1aXJlZCIsImFycmF5T2YiLCJhbnkiLCJmdW5jIiwidXBkYXRlTGF5ZXJEYXRhIiwiU3R5bGVkSG93VG9CdXR0b24iLCJIb3dUb0J1dHRvbiIsIm9uQ2xpY2siLCJMYXllckNvbG9yU2VsZWN0b3IiLCJsYWJlbCIsInNlbGVjdGVkQ29sb3IiLCJzZXRDb2xvciIsInJnYlZhbHVlIiwiQXJjTGF5ZXJDb2xvclNlbGVjdG9yIiwib25DaGFuZ2VDb25maWciLCJvbkNoYW5nZVZpc0NvbmZpZyIsInRhcmdldENvbG9yIiwiQ29sb3JSYW5nZUNvbmZpZyIsImNvbG9yUmFuZ2UiLCJpc1JhbmdlIiwiQ2hhbm5lbEJ5VmFsdWVTZWxlY3RvciIsImNoYW5uZWwiLCJkZXNjcmlwdGlvbiIsImNoYW5uZWxTY2FsZVR5cGUiLCJkb21haW4iLCJmaWVsZCIsImtleSIsInByb3BlcnR5IiwicmFuZ2UiLCJzY2FsZSIsImRlZmF1bHRNZWFzdXJlIiwic3VwcG9ydGVkRmllbGRUeXBlcyIsImNoYW5uZWxTdXBwb3J0ZWRGaWVsZFR5cGVzIiwiQ0hBTk5FTF9TQ0FMRV9TVVBQT1JURURfRklFTERTIiwic3VwcG9ydGVkRmllbGRzIiwiZmlsdGVyIiwiaW5jbHVkZXMiLCJzY2FsZU9wdGlvbnMiLCJnZXRTY2FsZU9wdGlvbnMiLCJzaG93U2NhbGUiLCJpc0FnZ3JlZ2F0ZWQiLCJkZWZhdWx0RGVzY3JpcHRpb24iLCJ2YWwiLCJBZ2dyQ29sb3JTY2FsZVNlbGVjdG9yIiwiQXJyYXkiLCJpc0FycmF5IiwiY29sb3JTY2FsZSIsIkFnZ3JlZ2F0aW9uVHlwZVNlbGVjdG9yIiwiYWdncmVnYXRpb24iLCJzZWxlY3RlZEZpZWxkIiwiYWdncmVnYXRpb25PcHRpb25zIiwiZ2V0QWdncmVnYXRpb25PcHRpb25zIiwibmFtZSIsIkJvdW5kYXJ5VHlwZVNlbGVjdG9yIiwiYm91bmRhcnlBZ2dyZWdhdGlvbiIsImNvbnNvbGUiLCJsb2ciLCJib3VuZGFyeUFnZ3JlZ2F0aW9uT3B0aW9ucyIsImFwaUNhbGxSZXF1ZXN0IiwiYXBpQ2FsbExvYWRlciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBb0JBOztBQUNBOztBQUNBOztBQUVBOztBQUtBOztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUdBOztBQUVBOztBQUVBOztBQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFLQSxJQUFNQSx1QkFBdUIsR0FBR0MsNkJBQU9DLEdBQVAsQ0FBV0MsS0FBWCxDQUFpQjtBQUMvQ0MsRUFBQUEsU0FBUyxFQUFFO0FBRG9DLENBQWpCLENBQUgsbUJBQTdCOztBQU9BLElBQU1DLDZCQUE2QixHQUFHSiw2QkFBT0MsR0FBUCxDQUFXQyxLQUFYLENBQWlCO0FBQ3JEQyxFQUFBQSxTQUFTLEVBQUU7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