Files
2024-02-15 17:01:50 +00:00

92 lines
2.3 KiB
TypeScript

import type React from 'react';
import styled from '@emotion/styled';
import CircleIndicator from 'sentry/components/circleIndicator';
import {Hovercard} from 'sentry/components/hovercard';
import {t} from 'sentry/locale';
import {space} from 'sentry/styles/space';
import type {TableDataWithTitle} from 'sentry/utils/discover/discoverQuery';
import theme from 'sentry/utils/theme';
import type {ThresholdsConfig} from './thresholdsStep';
type Props = {
children: React.ReactNode;
tableData: TableDataWithTitle[];
thresholds: ThresholdsConfig;
};
function ThresholdsHoverWrapper({children, thresholds, tableData}: Props) {
const {
unit,
max_values: {max1, max2},
} = thresholds;
const tableMeta = {...tableData[0].meta};
const fields = Object.keys(tableMeta);
const field = fields[0];
const dataType = tableMeta[field];
const formattedUnit =
unit && (dataType === 'duration' ? `${unit}s` : `/${unit.split('/')[1]}`);
const title = unit ? t(`Thresholds in %s`, formattedUnit) : t('Thresholds');
const notSetMsg = t('Not set');
const maxOneValue = max1 ?? notSetMsg;
const maxTwoValue = max2 ?? notSetMsg;
return (
<StyledHoverCard
skipWrapper
body={
<BodyWrapper>
<ContextTitle>{title}</ContextTitle>
<Row>
<StyledIndicator color={theme.green300} size={10} />
<span>0 - {maxOneValue}</span>
</Row>
<Row>
<StyledIndicator color={theme.yellow300} size={10} />
<span>
{maxOneValue} - {maxTwoValue}
</span>
</Row>
<Row>
<StyledIndicator color={theme.red300} size={10} />
<span>
{maxTwoValue} - {t('No max')}
</span>
</Row>
</BodyWrapper>
}
>
{children}
</StyledHoverCard>
);
}
const StyledHoverCard = styled(Hovercard)`
width: fit-content;
`;
const BodyWrapper = styled('div')`
display: flex;
flex-direction: column;
gap: ${space(1)};
`;
const Row = styled('span')`
display: flex;
gap: ${space(0.5)};
align-items: center;
`;
const ContextTitle = styled('h6')`
color: ${p => p.theme.subText};
margin-bottom: 0 !important;
`;
const StyledIndicator = styled(CircleIndicator)`
margin-right: ${space(1)};
`;
export default ThresholdsHoverWrapper;