index.tsx 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import {useEffect, useState} from 'react';
  2. import {browserHistory, RouteComponentProps} from 'react-router';
  3. import {Client} from 'app/api';
  4. import LoadingError from 'app/components/loadingError';
  5. import LoadingIndicator from 'app/components/loadingIndicator';
  6. import {Organization} from 'app/types';
  7. import {trackAnalyticsEvent} from 'app/utils/analytics';
  8. import useApi from 'app/utils/useApi';
  9. import {AlertRuleStatus, Incident} from '../types';
  10. import {fetchIncident} from '../utils';
  11. type Props = {
  12. api: Client;
  13. organization: Organization;
  14. } & RouteComponentProps<{alertId: string; orgId: string}, {}>;
  15. export const alertDetailsLink = (organization: Organization, incident: Incident) =>
  16. `/organizations/${organization.slug}/alerts/rules/details/${
  17. incident.alertRule.status === AlertRuleStatus.SNAPSHOT &&
  18. incident.alertRule.originalAlertRuleId
  19. ? incident.alertRule.originalAlertRuleId
  20. : incident.alertRule.id
  21. }/`;
  22. function IncidentDetails({organization, params}: Props) {
  23. const api = useApi();
  24. const [hasError, setHasError] = useState(false);
  25. const track = () => {
  26. trackAnalyticsEvent({
  27. eventKey: 'alert_details.viewed',
  28. eventName: 'Alert Details: Viewed',
  29. organization_id: parseInt(organization.id, 10),
  30. alert_id: parseInt(params.alertId, 10),
  31. });
  32. };
  33. const fetchData = async () => {
  34. setHasError(false);
  35. try {
  36. const incident = await fetchIncident(api, params.orgId, params.alertId);
  37. browserHistory.replace({
  38. pathname: alertDetailsLink(organization, incident),
  39. query: {alert: incident.identifier},
  40. });
  41. } catch (err) {
  42. setHasError(true);
  43. }
  44. };
  45. useEffect(() => {
  46. fetchData();
  47. track();
  48. }, []);
  49. if (hasError) {
  50. return <LoadingError onRetry={fetchData} />;
  51. }
  52. return <LoadingIndicator />;
  53. }
  54. export default IncidentDetails;