"use strict"; exports.__esModule = true; exports.default = void 0; var _propTypes = _interopRequireDefault(require("prop-types")); var _react = _interopRequireDefault(require("react")); var _xyChart = require("@data-ui/xy-chart"); var _theme = require("@data-ui/theme"); var _chartComposition = require("@superset-ui/chart-composition"); var _DefaultTooltipRenderer = _interopRequireDefault(require("./DefaultTooltipRenderer")); var _Encoder = _interopRequireDefault(require("./Encoder")); var _createMarginSelector = _interopRequireWildcard(require("../utils/selectors/createMarginSelector")); var _convertScaleToDataUIScaleShape = _interopRequireDefault(require("../utils/convertScaleToDataUIScaleShape")); var _createXYChartLayoutWithTheme = _interopRequireDefault(require("../utils/createXYChartLayoutWithTheme")); var _createEncoderSelector = _interopRequireDefault(require("../encodeable/createEncoderSelector")); var _createRenderLegend = _interopRequireDefault(require("../components/legend/createRenderLegend")); function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; } function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } const defaultProps = { className: '', margin: _createMarginSelector.DEFAULT_MARGIN, theme: _theme.chartTheme, TooltipRenderer: _DefaultTooltipRenderer.default }; class BoxPlot extends _react.default.PureComponent { constructor(props) { super(props); _defineProperty(this, "createEncoder", (0, _createEncoderSelector.default)(_Encoder.default)); _defineProperty(this, "createMargin", (0, _createMarginSelector.default)()); this.renderChart = this.renderChart.bind(this); } renderChart(dim) { const { width, height } = dim; const { data, margin, theme, TooltipRenderer } = this.props; const encoder = this.createEncoder(this.props); const { channels } = encoder; const isHorizontal = channels.y.definition.type === 'nominal'; if (typeof channels.x.scale !== 'undefined') { const xDomain = channels.x.getDomain(data); channels.x.scale.setDomain(xDomain); } if (typeof channels.y.scale !== 'undefined') { const yDomain = channels.y.getDomain(data); channels.y.scale.setDomain(yDomain); } const layout = (0, _createXYChartLayoutWithTheme.default)({ width, height, margin: this.createMargin(margin), theme, xEncoder: channels.x, yEncoder: channels.y }); return layout.renderChartWithFrame(chartDim => _react.default.createElement(_xyChart.XYChart, { showYGrid: true, width: chartDim.width, height: chartDim.height, ariaLabel: "BoxPlot", margin: layout.margin, renderTooltip: ({ datum, color }) => _react.default.createElement(TooltipRenderer, { datum: datum, color: color, encoder: encoder }), theme: theme, xScale: (0, _convertScaleToDataUIScaleShape.default)(channels.x.scale.config), yScale: (0, _convertScaleToDataUIScaleShape.default)(channels.y.scale.config) }, layout.renderXAxis(), layout.renderYAxis(), _react.default.createElement(_xyChart.BoxPlotSeries, { key: channels.x.definition.field, animated: true, data: isHorizontal ? data.map(row => _extends({}, row, { y: channels.y.get(row) })) : data.map(row => _extends({}, row, { x: channels.x.get(row) })), fill: datum => channels.color.encode(datum, '#55acee'), fillOpacity: 0.4, stroke: datum => channels.color.encode(datum), strokeWidth: 1, widthRatio: 0.6, horizontal: channels.y.definition.type === 'nominal' }))); } render() { const { className, data, width, height } = this.props; const encoder = this.createEncoder(this.props); return _react.default.createElement(_chartComposition.WithLegend, { className: "superset-chart-box-plot " + className, width: width, height: height, position: "top", renderLegend: (0, _createRenderLegend.default)(encoder, data, this.props), renderChart: this.renderChart }); } } exports.default = BoxPlot; _defineProperty(BoxPlot, "propTypes", { className: _propTypes.default.string, width: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number]).isRequired, height: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number]).isRequired, TooltipRenderer: _propTypes.default.elementType }); _defineProperty(BoxPlot, "defaultProps", defaultProps);