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

46 lines
1.4 KiB
TypeScript

import clamp from 'lodash/clamp';
import ExternalLink from 'sentry/components/links/externalLink';
import {Tooltip} from 'sentry/components/tooltip';
import {tct} from 'sentry/locale';
import {defined} from 'sentry/utils';
import {NumberContainer} from 'sentry/utils/discover/styles';
import {
formatPercentage,
formatSpanOperation,
getDuration,
} from 'sentry/utils/formatters';
interface Props {
containerProps?: React.DetailedHTMLProps<
React.HTMLAttributes<HTMLDivElement>,
HTMLDivElement
>;
op?: string;
percentage?: number;
total?: number;
}
export function TimeSpentCell({percentage, total, op, containerProps}: Props) {
const formattedPercentage = formatPercentage(clamp(percentage ?? 0, 0, 1));
const formattedTotal = getDuration((total ?? 0) / 1000, 2, true);
const tooltip = tct(
'The application spent [percentage] of its total time on this [span]. Read more about Time Spent in our [documentation:documentation].',
{
percentage: formattedPercentage,
span: formatSpanOperation(op, 'short'),
documentation: (
<ExternalLink href="https://docs.sentry.io/product/performance/queries/#what-is-time-spent" />
),
}
);
return (
<NumberContainer {...containerProps}>
<Tooltip isHoverable title={tooltip} showUnderline>
{defined(total) ? formattedTotal : '--'}
</Tooltip>
</NumberContainer>
);
}