import { Box, Typography } from '@mui/material'; import { useAtomValue } from 'jotai'; import { always, cond, equals, filter, gt, has, isNil, path, prop, reverse, sortBy, T } from 'ramda'; import { useLocaleDateTimeFormat } from '../../../utils'; import type { Tooltip } from '../../Chart/models'; import { formatMetricValueWithUnit } from '../../common/timeSeries'; import type { TimeValue } from '../../common/timeSeries/models'; import { tooltipDataAtom } from '../atoms'; import { useBarChartTooltipStyles } from './useBarChartTooltipStyles'; interface Props extends Partial> { base: number; timeSeries: Array; } const BarChartTooltip = ({ timeSeries, base, mode, sortOrder }: Props): JSX.Element | null => { const { classes } = useBarChartTooltipStyles(); const { format } = useLocaleDateTimeFormat(); const tooltipData = useAtomValue(tooltipDataAtom); if (isNil(tooltipData)) { return null; } if (has('thresholdLabel', tooltipData)) { return {tooltipData.thresholdLabel}; } const date = timeSeries[tooltipData.index].timeTick; const formattedDateTime = format({ date, formatString: 'L LTS' }); const isSingleMode = equals(mode, 'single'); const filteredMetrics = isSingleMode ? filter( ({ metric }) => equals(metric.metric_id, tooltipData.highlightedMetric), tooltipData.data ) : tooltipData.data; const displayHighLightedMetric = gt(filteredMetrics.length, 1); const sortedMetrics = cond([ // @ts-expect-error - suppressing pre-existing type mismatch [equals('name'), always(sortBy(path(['metric', 'name']), filteredMetrics))], // @ts-expect-error - suppressing pre-existing type mismatch [equals('ascending'), always(sortBy(prop('value'), filteredMetrics))], [ equals('descending'), // @ts-expect-error - suppressing pre-existing type mismatch always(reverse(sortBy(prop('value'), filteredMetrics))) ], [T, always(filteredMetrics)] // @ts-expect-error - suppressing pre-existing type mismatch ])(sortOrder); return (
{formattedDateTime}
{sortedMetrics.map(({ metric, value }) => (
{metric.name} {formatMetricValueWithUnit({ base, unit: metric.unit, value })}
))}
); }; export default BarChartTooltip;