rageClickList.tsx 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import Alert from 'sentry/components/alert';
  2. import * as Layout from 'sentry/components/layouts/thirds';
  3. import PageFiltersContainer from 'sentry/components/organizations/pageFilters/container';
  4. import {PageHeadingQuestionTooltip} from 'sentry/components/pageHeadingQuestionTooltip';
  5. import Placeholder from 'sentry/components/placeholder';
  6. import SentryDocumentTitle from 'sentry/components/sentryDocumentTitle';
  7. import {t} from 'sentry/locale';
  8. import useDeadRageSelectors from 'sentry/utils/replays/hooks/useDeadRageSelectors';
  9. import useOrganization from 'sentry/utils/useOrganization';
  10. export default function RageClickList() {
  11. const organization = useOrganization();
  12. const hasRageCicks = organization.features.includes(
  13. 'session-replay-rage-dead-selectors'
  14. );
  15. const {isLoading, isError, data} = useDeadRageSelectors({
  16. per_page: 3,
  17. sort: '-count_rage_clicks',
  18. });
  19. return hasRageCicks ? (
  20. <SentryDocumentTitle
  21. title={t('Top Selectors with Rage Clicks')}
  22. orgSlug={organization.slug}
  23. >
  24. <Layout.Header>
  25. <Layout.HeaderContent>
  26. <Layout.Title>
  27. {t('Top Selectors with Rage Clicks')}
  28. <PageHeadingQuestionTooltip
  29. title={t('See the top selectors your users have rage clicked on.')}
  30. docsUrl="https://docs.sentry.io/product/session-replay/replay-page-and-filters/"
  31. />
  32. </Layout.Title>
  33. </Layout.HeaderContent>
  34. </Layout.Header>
  35. <PageFiltersContainer>
  36. <Layout.Body>
  37. <Layout.Main fullWidth>
  38. {isLoading ? (
  39. <Placeholder />
  40. ) : isError ? (
  41. <Alert type="error" showIcon>
  42. {t('An error occurred')}
  43. </Alert>
  44. ) : (
  45. <pre>
  46. {JSON.stringify(
  47. data.data.map(d => {
  48. return {
  49. count_rage_clicks: d.count_rage_clicks,
  50. dom_element: d.dom_element,
  51. };
  52. }),
  53. null,
  54. '\t'
  55. )}
  56. </pre>
  57. )}
  58. </Layout.Main>
  59. </Layout.Body>
  60. </PageFiltersContainer>
  61. </SentryDocumentTitle>
  62. ) : (
  63. <Layout.Page withPadding>
  64. <Alert type="warning">{t("You don't have access to this feature")}</Alert>
  65. </Layout.Page>
  66. );
  67. }