import React from 'react'; import styled from '@emotion/styled'; import {Button} from 'sentry/components/button'; import Duration from 'sentry/components/duration'; import Pagination from 'sentry/components/pagination'; import {Panel, PanelBody, PanelHeader, PanelItem} from 'sentry/components/panels'; import TimeSince from 'sentry/components/timeSince'; import {Tooltip} from 'sentry/components/tooltip'; import {IconDownload} from 'sentry/icons'; import {t, tct} from 'sentry/locale'; import {space} from 'sentry/styles/space'; import {defined} from 'sentry/utils'; import useApiRequests from 'sentry/utils/useApiRequests'; import {CheckInStatus, Monitor, MonitorEnvironment} from 'sentry/views/monitors/types'; import CheckInIcon from './checkInIcon'; type CheckIn = { dateCreated: string; duration: number; id: string; status: CheckInStatus; attachmentId?: number; }; type Props = { monitor: Monitor; monitorEnv: MonitorEnvironment; orgId: string; }; type State = { checkInList: CheckIn[]; }; function MonitorCheckIns({monitor, monitorEnv, orgId}: Props) { const {data, hasError, renderComponent} = useApiRequests({ endpoints: [ [ 'checkInList', `/organizations/${orgId}/monitors/${monitor.slug}/checkins/`, {query: {per_page: '10', environment: monitorEnv.name}}, {paginate: true}, ], ], }); const generateDownloadUrl = (checkin: CheckIn) => `/api/0/organizations/${orgId}/monitors/${monitor.slug}/checkins/${checkin.id}/attachment/`; const renderedComponent = renderComponent( {t('Recent Check-ins')} {data.checkInList?.map(checkIn => ( {defined(checkIn.duration) && ( )} {checkIn.attachmentId && ( )} ))} ); return hasError ? {renderedComponent} : renderedComponent; } export default MonitorCheckIns; const DivMargin = styled('div')` margin-right: ${space(2)}; `; const CheckInIconWrapper = styled(DivMargin)` display: flex; align-items: center; `; const TimeSinceWrapper = styled(DivMargin)` font-variant-numeric: tabular-nums; `; const DurationWrapper = styled('div')` font-variant-numeric: tabular-nums; `; const ErrorWrapper = styled('div')` margin: ${space(3)} ${space(3)} 0; `; const AttachmentWrapper = styled('div')` margin-left: auto; `;