/** * 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 { GenericDataType, SMART_DATE_ID, t } from '@superset-ui/core'; import { ControlPanelConfig, CurrencyFormatControl, D3_FORMAT_DOCS, D3_TIME_FORMAT_OPTIONS, Dataset, GranularityControl, getStandardizedControls, MetricControl, AdhocFiltersControl, YAxisFormatControl, } from '@superset-ui/chart-controls'; import { headerFontSize, subtitleFontSize, subtitleControl, showMetricNameControl, metricNameFontSizeWithVisibility, } from '../sharedControls'; export default { controlPanelSections: [ { label: t('Query'), expanded: true, controlSetRows: [ [MetricControl()], [AdhocFiltersControl()], [ { name: 'granularity', config: { type: GranularityControl, label: t('Time Column'), description: t('Select the time column for temporal filtering'), clearable: true, temporalColumnsOnly: true, }, }, ], ], }, { label: t('Chart Options'), expanded: true, controlSetRows: [ [headerFontSize], [subtitleControl], [subtitleFontSize], [showMetricNameControl], [metricNameFontSizeWithVisibility], [YAxisFormatControl()], [CurrencyFormatControl()], [ { 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', ), }, }, ], [ { name: 'conditional_formatting', config: { type: 'ConditionalFormattingControl', renderTrigger: true, label: t('Conditional Formatting'), description: t('Apply conditional color formatting to metric'), shouldMapStateToProps() { return true; }, mapStateToProps(explore, _, chart) { const verboseMap = explore?.datasource?.hasOwnProperty( 'verbose_map', ) ? (explore?.datasource as Dataset)?.verbose_map : (explore?.datasource?.columns ?? {}); const { colnames, coltypes } = chart?.queriesResponse?.[0] ?? {}; const numericColumns = Array.isArray(colnames) && Array.isArray(coltypes) ? colnames .filter( (_: string, index: number) => coltypes[index] === GenericDataType.Numeric, ) .map((colname: string | number) => ({ value: colname, label: (Array.isArray(verboseMap) ? verboseMap[colname as number] : verboseMap[colname as string]) ?? colname, })) : []; return { columnOptions: numericColumns, verboseMap, }; }, }, }, ], ], }, ], controlOverrides: { y_axis_format: { label: t('Number format'), }, }, formDataOverrides: formData => ({ ...formData, metric: getStandardizedControls().shiftMetric(), }), } as ControlPanelConfig;