/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ import { t } from '@superset-ui/core'; import { ControlPanelConfig, formatSelectOptions, sections, ControlPanelsContainerProps, sharedControls, AdhocFiltersControl, ColorSchemeControl, EntityControl, OrderByControl, RowLimitControl, SeriesControl, SizeControl, XControl, YAxisFormatControl, YControl, } from '@superset-ui/chart-controls'; import { DEFAULT_FORM_DATA } from './constants'; import { legendSection, truncateXAxis, xAxisBounds, xAxisLabelRotation, xAxisLabelInterval, } from '../controls'; import { defaultYAxis } from '../defaults'; const { logAxis, truncateYAxis, yAxisBounds, opacity } = DEFAULT_FORM_DATA; const config: ControlPanelConfig = { controlPanelSections: [ { label: t('Query'), expanded: true, controlSetRows: [ [SeriesControl()], [EntityControl()], [XControl()], [YControl()], [AdhocFiltersControl()], [SizeControl()], [OrderByControl()], [ { name: 'order_desc', config: { ...sharedControls.order_desc, visibility: ({ controls }) => Boolean(controls.orderby.value), }, }, ], [RowLimitControl()], ], }, { label: t('Chart Options'), expanded: true, tabOverride: 'customize', controlSetRows: [ [ColorSchemeControl()], ...legendSection, [ { name: 'max_bubble_size', config: { type: 'SelectControl', renderTrigger: true, freeForm: true, label: t('Max Bubble Size'), default: '25', choices: formatSelectOptions([ '5', '10', '15', '25', '50', '75', '100', ]), }, }, ], [ { name: 'tooltipSizeFormat', config: { ...sharedControls.y_axis_format, label: t('Bubble size number format'), }, }, ], [ { name: 'opacity', config: { type: 'SliderControl', label: t('Bubble Opacity'), renderTrigger: true, min: 0, max: 1, step: 0.1, default: opacity, description: t( 'Opacity of bubbles, 0 means completely transparent, 1 means opaque', ), }, }, ], ], }, { label: t('X Axis'), expanded: true, controlSetRows: [ [ { name: 'x_axis_label', config: { type: 'TextControl', label: t('X Axis Title'), renderTrigger: true, default: '', }, }, ], [xAxisLabelRotation], [xAxisLabelInterval], [ { name: 'x_axis_title_margin', config: { type: 'SelectControl', freeForm: true, clearable: true, label: t('X AXIS TITLE MARGIN'), renderTrigger: true, default: sections.TITLE_MARGIN_OPTIONS[1], choices: formatSelectOptions(sections.TITLE_MARGIN_OPTIONS), }, }, ], [ { name: 'xAxisFormat', config: { ...sharedControls.y_axis_format, label: t('X Axis Format'), }, }, ], [ { name: 'logXAxis', config: { type: 'CheckboxControl', label: t('Logarithmic x-axis'), renderTrigger: true, default: logAxis, description: t('Logarithmic x-axis'), }, }, ], ], }, { label: t('Y Axis'), expanded: true, controlSetRows: [ [ { name: 'y_axis_label', config: { type: 'TextControl', label: t('Y Axis Title'), renderTrigger: true, default: '', }, }, ], [ { name: 'yAxisLabelRotation', config: { type: 'SelectControl', freeForm: true, clearable: false, label: t('Rotate y axis label'), choices: [ [0, '0°'], [45, '45°'], ], default: defaultYAxis.yAxisLabelRotation, renderTrigger: true, description: t( 'Input field supports custom rotation. e.g. 30 for 30°', ), }, }, ], [ { name: 'y_axis_title_margin', config: { type: 'SelectControl', freeForm: true, clearable: true, label: t('Y AXIS TITLE MARGIN'), renderTrigger: true, default: sections.TITLE_MARGIN_OPTIONS[1], choices: formatSelectOptions(sections.TITLE_MARGIN_OPTIONS), }, }, ], [YAxisFormatControl()], [ { name: 'logYAxis', config: { type: 'CheckboxControl', label: t('Logarithmic y-axis'), renderTrigger: true, default: logAxis, description: t('Logarithmic y-axis'), }, }, ], [truncateXAxis], [xAxisBounds], [ { name: 'truncateYAxis', config: { type: 'CheckboxControl', label: t('Truncate Y Axis'), default: truncateYAxis, renderTrigger: true, description: t( 'Truncate Y Axis. Can be overridden by specifying a min or max bound.', ), }, }, ], [ { name: 'y_axis_bounds', config: { type: 'BoundsControl', label: t('Y Axis Bounds'), renderTrigger: true, default: yAxisBounds, description: t( 'Bounds for the Y-axis. When left empty, the bounds are ' + 'dynamically defined based on the min/max of the data. Note that ' + "this feature will only expand the axis range. It won't " + "narrow the data's extent.", ), visibility: ({ controls }: ControlPanelsContainerProps) => Boolean(controls?.truncateYAxis?.value), }, }, ], ], }, ], }; export default config;