Skip to content

Commit

Permalink
feat(plugins): Tooltips on BigNumber with Time Comparison chart (#27092)
Browse files Browse the repository at this point in the history
  • Loading branch information
Antonio-RiveroMartnez committed Feb 14, 2024
1 parent a912faf commit 13f1642
Show file tree
Hide file tree
Showing 5 changed files with 87 additions and 20 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ export * from './components/ColumnOption';
export * from './components/ColumnTypeLabel/ColumnTypeLabel';
export * from './components/MetricOption';
export * from './components/ControlSubSectionHeader';
export * from './components/Tooltip';

export * from './shared-controls';
export * from './types';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@
* under the License.
*/
import React, { createRef, useMemo } from 'react';
import { css, styled, useTheme } from '@superset-ui/core';
import { css, styled, t, useTheme } from '@superset-ui/core';
import { Tooltip } from '@superset-ui/chart-controls';
import {
PopKPIComparisonSymbolStyleProps,
PopKPIComparisonValueStyleProps,
Expand Down Expand Up @@ -57,6 +58,7 @@ export default function PopKPI(props: PopKPIProps) {
subheaderFontSize,
comparisonColorEnabled,
percentDifferenceNumber,
comparatorText,
} = props;

const rootElem = createRef<HTMLDivElement>();
Expand Down Expand Up @@ -117,9 +119,21 @@ export default function PopKPI(props: PopKPIProps) {

const SYMBOLS_WITH_VALUES = useMemo(
() => [
['#', prevNumber],
['△', valueDifference],
['%', percentDifferenceFormattedString],
{
symbol: '#',
value: prevNumber,
tooltipText: t('Data for %s', comparatorText),
},
{
symbol: '△',
value: valueDifference,
tooltipText: t('Value difference between the time periods'),
},
{
symbol: '%',
value: percentDifferenceFormattedString,
tooltipText: t('Percentage difference between the time periods'),
},
],
[prevNumber, valueDifference, percentDifferenceFormattedString],
);
Expand Down Expand Up @@ -147,18 +161,24 @@ export default function PopKPI(props: PopKPIProps) {
>
{SYMBOLS_WITH_VALUES.map((symbol_with_value, index) => (
<ComparisonValue
key={`comparison-symbol-${symbol_with_value[0]}`}
key={`comparison-symbol-${symbol_with_value.symbol}`}
subheaderFontSize={subheaderFontSize}
>
<SymbolWrapper
backgroundColor={
index > 0 ? backgroundColor : defaultBackgroundColor
}
textColor={index > 0 ? textColor : defaultTextColor}
<Tooltip
id="tooltip"
placement="top"
title={symbol_with_value.tooltipText}
>
{symbol_with_value[0]}
</SymbolWrapper>
{symbol_with_value[1]}
<SymbolWrapper
backgroundColor={
index > 0 ? backgroundColor : defaultBackgroundColor
}
textColor={index > 0 ? textColor : defaultTextColor}
>
{symbol_with_value.symbol}
</SymbolWrapper>
{symbol_with_value.value}
</Tooltip>
</ComparisonValue>
))}
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import {
NumberFormats,
getNumberFormatter,
} from '@superset-ui/core';
import { computeQueryBComparator, formatCustomComparator } from '../utils';

export const parseMetricValue = (metricValue: number | string | null) => {
if (typeof metricValue === 'string') {
Expand Down Expand Up @@ -128,6 +129,18 @@ export default function transformProps(chartProps: ChartProps) {
prevNumber = numberFormatter(prevNumber);
valueDifference = numberFormatter(valueDifference);
const percentDifference: string = formatPercentChange(percentDifferenceNum);
const comparatorText =
formData.timeComparison !== 'c'
? ` ${computeQueryBComparator(
formData.adhocFilters,
formData.timeComparison,
formData.extraFormData,
' - ',
)}`
: `${formatCustomComparator(
formData.adhocCustom,
formData.extraFormData,
)}`;

return {
width,
Expand All @@ -147,5 +160,6 @@ export default function transformProps(chartProps: ChartProps) {
compType,
comparisonColorEnabled,
percentDifferenceNumber: percentDifferenceNum,
comparatorText,
};
}
Original file line number Diff line number Diff line change
Expand Up @@ -60,4 +60,5 @@ export type PopKPIProps = PopKPIStylesProps &
percentDifferenceFormattedString: string;
compType: string;
percentDifferenceNumber: number;
comparatorText: string;
};
Original file line number Diff line number Diff line change
Expand Up @@ -198,12 +198,10 @@ const calculatePrev = (
return [startDatePrev, endDatePrev];
};

export const computeQueryBComparator = (
const getTimeRange = (
adhocFilters: AdhocFilter[],
timeComparison: string,
extraFormData: any,
join = ':',
) => {
): string | null => {
const timeFilterIndex =
adhocFilters?.findIndex(
filter => 'operator' in filter && filter.operator === 'TEMPORAL_RANGE',
Expand All @@ -212,9 +210,6 @@ export const computeQueryBComparator = (
const timeFilter =
timeFilterIndex !== -1 ? adhocFilters[timeFilterIndex] : null;

let testSince = null;
let testUntil = null;

if (
timeFilter &&
'comparator' in timeFilter &&
Expand All @@ -224,6 +219,24 @@ export const computeQueryBComparator = (
if (extraFormData?.time_range) {
timeRange = extraFormData.time_range;
}
return timeRange;
}

return null;
};

export const computeQueryBComparator = (
adhocFilters: AdhocFilter[],
timeComparison: string,
extraFormData: any,
join = ':',
) => {
const timeRange = getTimeRange(adhocFilters, extraFormData);

let testSince = null;
let testUntil = null;

if (timeRange) {
[testSince, testUntil] = getSinceUntil(timeRange);
}

Expand All @@ -244,3 +257,21 @@ export const computeQueryBComparator = (

return null;
};

export const formatCustomComparator = (
adhocFilters: AdhocFilter[],
extraFormData: any,
): string => {
const timeRange = getTimeRange(adhocFilters, extraFormData);

if (timeRange) {
const [start, end] = timeRange.split(' : ').map(dateStr => {
const formattedDate = moment(dateStr).format('YYYY-MM-DDTHH:mm:ss');
return formattedDate.replace(/Z/g, '');
});

return `${start} - ${end}`;
}

return '';
};

0 comments on commit 13f1642

Please sign in to comment.