superset-frontend/plugins/plugin-chart-echarts/src/BigNumber/BigNumberWithTrendline/controlPanel.tsx (283 lines of code) (raw):

/** * 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 { SMART_DATE_ID, t } from '@superset-ui/core'; import { aggregationControl, ControlPanelConfig, ControlSubSectionHeader, D3_FORMAT_DOCS, D3_TIME_FORMAT_OPTIONS, getStandardizedControls, temporalColumnMixin, } from '@superset-ui/chart-controls'; import { headerFontSize, subheaderFontSize, subtitleFontSize, subtitleControl, showMetricNameControl, metricNameFontSizeWithVisibility, } from '../sharedControls'; const config: ControlPanelConfig = { controlPanelSections: [ { label: t('Query'), expanded: true, controlSetRows: [ ['x_axis'], ['time_grain_sqla'], [aggregationControl], ['metric'], ['adhoc_filters'], ], }, { label: t('Options'), tabOverride: 'data', expanded: true, controlSetRows: [ [ { name: 'compare_lag', config: { type: 'TextControl', label: t('Comparison Period Lag'), isInt: true, description: t( 'Based on granularity, number of time periods to compare against', ), }, }, ], [ { name: 'compare_suffix', config: { type: 'TextControl', label: t('Comparison suffix'), description: t('Suffix to apply after the percentage display'), }, }, ], [ { name: 'show_timestamp', config: { type: 'CheckboxControl', label: t('Show Timestamp'), renderTrigger: true, default: false, description: t('Whether to display the timestamp'), }, }, ], [ { name: 'show_trend_line', config: { type: 'CheckboxControl', label: t('Show Trend Line'), renderTrigger: true, default: true, description: t('Whether to display the trend line'), }, }, ], [ { name: 'start_y_axis_at_zero', config: { type: 'CheckboxControl', label: t('Start y-axis at 0'), renderTrigger: true, default: true, description: t( 'Start y-axis at zero. Uncheck to start y-axis at minimum value in the data.', ), }, }, ], [ { name: 'time_range_fixed', config: { type: 'CheckboxControl', label: t('Fix to selected Time Range'), description: t( 'Fix the trend line to the full time range specified in case filtered results do not include the start or end dates', ), renderTrigger: true, visibility(props) { const { time_range: timeRange } = props.form_data; // only display this option when a time range is selected return !!timeRange && timeRange !== 'No filter'; }, }, }, ], ], }, { label: t('Chart Options'), expanded: true, controlSetRows: [ ['color_picker', null], [headerFontSize], [subheaderFontSize], [subtitleControl], [subtitleFontSize], [showMetricNameControl], [metricNameFontSizeWithVisibility], ['y_axis_format'], ['currency_format'], [ { name: 'time_format', config: { type: 'SelectControl', freeForm: true, label: t('Date format'), renderTrigger: true, choices: D3_TIME_FORMAT_OPTIONS, description: D3_FORMAT_DOCS, default: SMART_DATE_ID, }, }, ], [ { name: 'force_timestamp_formatting', config: { type: 'CheckboxControl', label: t('Force date format'), renderTrigger: true, default: false, description: t( 'Use date formatting even when metric value is not a timestamp', ), }, }, ], ], }, { label: t('Advanced Analytics'), expanded: false, controlSetRows: [ // eslint-disable-next-line react/jsx-key [ <ControlSubSectionHeader> {t('Rolling Window')} </ControlSubSectionHeader>, ], [ { name: 'rolling_type', config: { type: 'SelectControl', label: t('Rolling Function'), default: 'None', choices: [ ['None', t('None')], ['mean', t('mean')], ['sum', t('sum')], ['std', t('std')], ['cumsum', t('cumsum')], ], description: t( 'Defines a rolling window function to apply, works along ' + 'with the [Periods] text box', ), }, }, ], [ { name: 'rolling_periods', config: { type: 'TextControl', label: t('Periods'), isInt: true, description: t( 'Defines the size of the rolling window function, ' + 'relative to the time granularity selected', ), }, }, ], [ { name: 'min_periods', config: { type: 'TextControl', label: t('Min Periods'), isInt: true, description: t( 'The minimum number of rolling periods required to show ' + 'a value. For instance if you do a cumulative sum on 7 days ' + 'you may want your "Min Period" to be 7, so that all data points ' + 'shown are the total of 7 periods. This will hide the "ramp up" ' + 'taking place over the first 7 periods', ), }, }, ], [<ControlSubSectionHeader>{t('Resample')}</ControlSubSectionHeader>], [ { name: 'resample_rule', config: { type: 'SelectControl', freeForm: true, label: t('Rule'), default: null, choices: [ ['1T', t('1 minutely frequency')], ['1H', t('1 hourly frequency')], ['1D', t('1 calendar day frequency')], ['7D', t('7 calendar day frequency')], ['1MS', t('1 month start frequency')], ['1M', t('1 month end frequency')], ['1AS', t('1 year start frequency')], ['1A', t('1 year end frequency')], ], description: t('Pandas resample rule'), }, }, ], [ { name: 'resample_method', config: { type: 'SelectControl', freeForm: true, label: t('Fill method'), default: null, choices: [ ['asfreq', t('Null imputation')], ['zerofill', t('Zero imputation')], ['linear', t('Linear interpolation')], ['ffill', t('Forward values')], ['bfill', t('Backward values')], ['median', t('Median values')], ['mean', t('Mean values')], ['sum', t('Sum values')], ], description: t('Pandas resample method'), }, }, ], ], }, ], controlOverrides: { y_axis_format: { label: t('Number format'), }, x_axis: { label: t('Temporal X-Axis'), ...temporalColumnMixin, }, }, formDataOverrides: formData => ({ ...formData, metric: getStandardizedControls().shiftMetric(), }), }; export default config;