mirror of
https://github.com/apache/superset.git
synced 2026-04-19 16:14:52 +00:00
121 lines
3.3 KiB
TypeScript
121 lines
3.3 KiB
TypeScript
/**
|
|
* 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 {
|
|
ColorFormatters,
|
|
getColorFormatters,
|
|
Metric,
|
|
} from '@superset-ui/chart-controls';
|
|
import {
|
|
GenericDataType,
|
|
getMetricLabel,
|
|
extractTimegrain,
|
|
QueryFormData,
|
|
getValueFormatter,
|
|
} from '@superset-ui/core';
|
|
import { BigNumberTotalChartProps, BigNumberVizProps } from '../types';
|
|
import { getDateFormatter, parseMetricValue } from '../utils';
|
|
import { Refs } from '../../types';
|
|
|
|
export default function transformProps(
|
|
chartProps: BigNumberTotalChartProps,
|
|
): BigNumberVizProps {
|
|
const {
|
|
width,
|
|
height,
|
|
queriesData,
|
|
formData,
|
|
rawFormData,
|
|
hooks,
|
|
datasource: { currencyFormats = {}, columnFormats = {} },
|
|
} = chartProps;
|
|
const {
|
|
headerFontSize,
|
|
metric = 'value',
|
|
subtitle,
|
|
subtitleFontSize,
|
|
forceTimestampFormatting,
|
|
timeFormat,
|
|
yAxisFormat,
|
|
conditionalFormatting,
|
|
currencyFormat,
|
|
subheader,
|
|
subheaderFontSize,
|
|
} = formData;
|
|
const refs: Refs = {};
|
|
const { data = [], coltypes = [] } = queriesData[0];
|
|
const granularity = extractTimegrain(rawFormData as QueryFormData);
|
|
const metricName = getMetricLabel(metric);
|
|
const formattedSubtitle = subtitle?.trim() ? subtitle : subheader || '';
|
|
const formattedSubtitleFontSize = subtitle?.trim()
|
|
? (subtitleFontSize ?? 1)
|
|
: (subheaderFontSize ?? 1);
|
|
const bigNumber =
|
|
data.length === 0 ? null : parseMetricValue(data[0][metricName]);
|
|
|
|
let metricEntry: Metric | undefined;
|
|
if (chartProps.datasource?.metrics) {
|
|
metricEntry = chartProps.datasource.metrics.find(
|
|
metricItem => metricItem.metric_name === metric,
|
|
);
|
|
}
|
|
|
|
const formatTime = getDateFormatter(
|
|
timeFormat,
|
|
granularity,
|
|
metricEntry?.d3format,
|
|
);
|
|
|
|
const numberFormatter = getValueFormatter(
|
|
metric,
|
|
currencyFormats,
|
|
columnFormats,
|
|
yAxisFormat,
|
|
currencyFormat,
|
|
);
|
|
|
|
const headerFormatter =
|
|
coltypes[0] === GenericDataType.Temporal ||
|
|
coltypes[0] === GenericDataType.String ||
|
|
forceTimestampFormatting
|
|
? formatTime
|
|
: numberFormatter;
|
|
|
|
const { onContextMenu } = hooks;
|
|
|
|
const defaultColorFormatters = [] as ColorFormatters;
|
|
|
|
const colorThresholdFormatters =
|
|
getColorFormatters(conditionalFormatting, data, false) ??
|
|
defaultColorFormatters;
|
|
|
|
return {
|
|
width,
|
|
height,
|
|
bigNumber,
|
|
headerFormatter,
|
|
headerFontSize,
|
|
subheaderFontSize,
|
|
subtitleFontSize: formattedSubtitleFontSize,
|
|
subtitle: formattedSubtitle,
|
|
onContextMenu,
|
|
refs,
|
|
colorThresholdFormatters,
|
|
};
|
|
}
|