/** * 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, D3_FORMAT_DOCS, D3_TIME_FORMAT_OPTIONS, Dataset, getStandardizedControls, } from '@superset-ui/chart-controls'; import { headerFontSize, subheaderFontSize } from '../sharedControls'; export default { controlPanelSections: [ { label: t('Query'), expanded: true, controlSetRows: [['metric'], ['adhoc_filters']], }, { label: t('Display settings'), expanded: true, tabOverride: 'data', controlSetRows: [ [ { name: 'subheader', config: { type: 'TextControl', label: t('Subheader'), renderTrigger: true, description: t( 'Description text that shows up below your Big Number', ), }, }, ], ], }, { label: t('Chart Options'), expanded: true, controlSetRows: [ [headerFontSize], [subheaderFontSize], ['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', ), }, }, ], [ { 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( (colname: string, index: number) => coltypes[index] === GenericDataType.Numeric, ) .map(colname => ({ value: colname, label: verboseMap[colname] ?? colname, })) : []; return { columnOptions: numericColumns, verboseMap, }; }, }, }, ], ], }, ], controlOverrides: { y_axis_format: { label: t('Number format'), }, }, formDataOverrides: formData => ({ ...formData, metric: getStandardizedControls().shiftMetric(), }), } as ControlPanelConfig;