import {Fragment} from 'react'; import styled from '@emotion/styled'; import Button from 'sentry/components/button'; import {SectionHeading} from 'sentry/components/charts/styles'; import EmptyStateWarning from 'sentry/components/emptyStateWarning'; import GroupList from 'sentry/components/issues/groupList'; import LoadingError from 'sentry/components/loadingError'; import {Panel, PanelBody} from 'sentry/components/panels'; import {t} from 'sentry/locale'; import space from 'sentry/styles/space'; import {OrganizationSummary, Project} from 'sentry/types'; import { RELATED_ISSUES_BOOLEAN_QUERY_ERROR, RelatedIssuesNotAvailable, } from 'sentry/views/alerts/rules/metric/details/relatedIssuesNotAvailable'; import {makeDefaultCta} from 'sentry/views/alerts/rules/metric/metricRulePresets'; import {MetricRule} from 'sentry/views/alerts/rules/metric/types'; import {isSessionAggregate} from 'sentry/views/alerts/utils'; import {TimePeriodType} from './constants'; interface Props { organization: OrganizationSummary; projects: Project[]; rule: MetricRule; timePeriod: TimePeriodType; query?: string; } function RelatedIssues({rule, organization, projects, query, timePeriod}: Props) { function renderErrorMessage({detail}: {detail: string}, retry: () => void) { if ( detail === RELATED_ISSUES_BOOLEAN_QUERY_ERROR && !isSessionAggregate(rule.aggregate) ) { const {buttonText, to} = makeDefaultCta({ orgSlug: organization.slug, projects, rule, query, timePeriod, }); return ; } return ; } function renderEmptyMessage() { return ( {t('No issues for this alert rule')} ); } const {start, end} = timePeriod; const path = `/organizations/${organization.slug}/issues/`; const queryParams = { start, end, groupStatsPeriod: 'auto', limit: 5, ...(rule.environment ? {environment: rule.environment} : {}), sort: rule.aggregate === 'count_unique(user)' ? 'user' : 'freq', query, project: projects.map(project => project.id), }; const issueSearch = { pathname: `/organizations/${organization.slug}/issues/`, query: queryParams, }; return ( {t('Related Issues')} ); } const StyledSectionHeading = styled(SectionHeading)` display: flex; align-items: center; `; const ControlsWrapper = styled('div')` display: flex; align-items: center; justify-content: space-between; margin-bottom: ${space(1)}; `; const TableWrapper = styled('div')` margin-bottom: ${space(4)}; ${Panel} { /* smaller space between table and pagination */ margin-bottom: -${space(1)}; } `; export default RelatedIssues;