transactionToProfileButton.tsx 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import {Location} from 'history';
  2. import {Button, ButtonProps} from 'sentry/components/button';
  3. import {t} from 'sentry/locale';
  4. import {trackAnalytics} from 'sentry/utils/analytics';
  5. import {generateProfileFlamechartRouteWithQuery} from 'sentry/utils/profiling/routes';
  6. import useOrganization from 'sentry/utils/useOrganization';
  7. import {useTransactionProfileId} from './transactionProfileIdProvider';
  8. interface Props {
  9. projectSlug: string;
  10. children?: React.ReactNode;
  11. query?: Location['query'];
  12. size?: ButtonProps['size'];
  13. }
  14. function TransactionToProfileButton({
  15. projectSlug,
  16. query,
  17. children = t('View Profile'),
  18. size = 'sm',
  19. }: Props) {
  20. const profileId = useTransactionProfileId();
  21. const organization = useOrganization();
  22. if (!profileId) {
  23. return null;
  24. }
  25. function handleGoToProfile() {
  26. trackAnalytics('profiling_views.go_to_flamegraph', {
  27. organization,
  28. source: 'transaction_details',
  29. });
  30. }
  31. const target = generateProfileFlamechartRouteWithQuery({
  32. orgSlug: organization.slug,
  33. projectSlug,
  34. profileId,
  35. query,
  36. });
  37. return (
  38. <Button size={size} onClick={handleGoToProfile} to={target}>
  39. {children}
  40. </Button>
  41. );
  42. }
  43. export {TransactionToProfileButton};