noData.tsx 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import {useRef} from 'react';
  2. import {useTheme} from '@emotion/react';
  3. import useFeedbackWidget from 'sentry/components/feedback/widget/useFeedbackWidget';
  4. import {IconGroup} from 'sentry/icons';
  5. import {t, tct} from 'sentry/locale';
  6. import {TraceDrawerComponents} from 'sentry/views/performance/newTraceDetails/traceDrawer/details/styles';
  7. import type {TraceTreeNodeDetailsProps} from 'sentry/views/performance/newTraceDetails/traceDrawer/tabs/traceTreeNodeDetails';
  8. import {
  9. makeTraceNodeBarColor,
  10. type NoDataNode,
  11. } from 'sentry/views/performance/newTraceDetails/traceModels/traceTree';
  12. import {Row} from 'sentry/views/performance/traceDetails/styles';
  13. export function NoDataDetails(props: TraceTreeNodeDetailsProps<NoDataNode>) {
  14. const theme = useTheme();
  15. return (
  16. <TraceDrawerComponents.DetailContainer>
  17. <TraceDrawerComponents.HeaderContainer>
  18. <TraceDrawerComponents.IconTitleWrapper>
  19. <TraceDrawerComponents.IconBorder
  20. backgroundColor={makeTraceNodeBarColor(theme, props.node)}
  21. >
  22. <IconGroup />
  23. </TraceDrawerComponents.IconBorder>
  24. <div style={{fontWeight: 'bold'}}>{t('Empty')}</div>
  25. </TraceDrawerComponents.IconTitleWrapper>
  26. <TraceDrawerComponents.NodeActions
  27. organization={props.organization}
  28. node={props.node}
  29. onTabScrollToNode={props.onTabScrollToNode}
  30. />
  31. </TraceDrawerComponents.HeaderContainer>
  32. <TraceDrawerComponents.Table className="table key-value">
  33. <tbody>
  34. <Row title={t('Data quality')}>
  35. {tct(
  36. 'The cause of missing data could be misconfiguration or lack of instrumentation. Send us [feedback] if you are having trouble figuring this out.',
  37. {feedback: <InlineFeedbackLink />}
  38. )}
  39. </Row>
  40. </tbody>
  41. </TraceDrawerComponents.Table>
  42. </TraceDrawerComponents.DetailContainer>
  43. );
  44. }
  45. function InlineFeedbackLink() {
  46. const linkref = useRef<HTMLAnchorElement>(null);
  47. const feedback = useFeedbackWidget({buttonRef: linkref});
  48. return feedback ? (
  49. <a href="#" ref={linkref}>
  50. {t('feedback')}
  51. </a>
  52. ) : (
  53. <a href="mailto:support@sentry.io?subject=Trace%20does%20not%20contain%20data">
  54. {t('feedback')}
  55. </a>
  56. );
  57. }