uptimeChecksTable.tsx 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import {Fragment} from 'react';
  2. import {SectionHeading} from 'sentry/components/charts/styles';
  3. import LoadingError from 'sentry/components/loadingError';
  4. import LoadingIndicator from 'sentry/components/loadingIndicator';
  5. import Pagination from 'sentry/components/pagination';
  6. import {t} from 'sentry/locale';
  7. import {decodeScalar} from 'sentry/utils/queryString';
  8. import {useLocation} from 'sentry/utils/useLocation';
  9. import useOrganization from 'sentry/utils/useOrganization';
  10. import {useUptimeChecks} from 'sentry/views/insights/uptime/utils/useUptimeChecks';
  11. import type {UptimeRule} from './types';
  12. import {UptimeChecksGrid} from './uptimeChecksGrid';
  13. interface UptimeChecksTableProps {
  14. uptimeRule: UptimeRule;
  15. }
  16. export function UptimeChecksTable({uptimeRule}: UptimeChecksTableProps) {
  17. const location = useLocation();
  18. const organization = useOrganization();
  19. const timeRange = {
  20. start: decodeScalar(location.query.start),
  21. end: decodeScalar(location.query.end),
  22. statsPeriod: decodeScalar(location.query.statsPeriod),
  23. };
  24. const {
  25. data: uptimeChecks,
  26. isError,
  27. isPending,
  28. getResponseHeader,
  29. refetch,
  30. } = useUptimeChecks({
  31. orgSlug: organization.slug,
  32. projectSlug: uptimeRule.projectSlug,
  33. uptimeAlertId: uptimeRule.id,
  34. cursor: decodeScalar(location.query.cursor),
  35. ...timeRange,
  36. limit: 10,
  37. });
  38. if (isError) {
  39. return <LoadingError message={t('Failed to load uptime checks')} onRetry={refetch} />;
  40. }
  41. return (
  42. <Fragment>
  43. <SectionHeading>{t('Checks List')}</SectionHeading>
  44. {isPending ? (
  45. <LoadingIndicator />
  46. ) : (
  47. <UptimeChecksGrid uptimeRule={uptimeRule} uptimeChecks={uptimeChecks} />
  48. )}
  49. <Pagination pageLinks={getResponseHeader?.('Link')} />
  50. </Fragment>
  51. );
  52. }