details.tsx 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import {Fragment} from 'react';
  2. import {RouteComponentProps} from 'react-router';
  3. import * as Layout from 'sentry/components/layouts/thirds';
  4. import {Panel, PanelHeader} from 'sentry/components/panels';
  5. import {t} from 'sentry/locale';
  6. import AsyncView from 'sentry/views/asyncView';
  7. import MonitorCheckIns from './monitorCheckIns';
  8. import MonitorHeader from './monitorHeader';
  9. import MonitorIssues from './monitorIssues';
  10. import MonitorStats from './monitorStats';
  11. import MonitorOnboarding from './onboarding';
  12. import {Monitor} from './types';
  13. type Props = AsyncView['props'] &
  14. RouteComponentProps<{monitorId: string; orgId: string}, {}>;
  15. type State = AsyncView['state'] & {
  16. monitor: Monitor | null;
  17. };
  18. class MonitorDetails extends AsyncView<Props, State> {
  19. getEndpoints(): ReturnType<AsyncView['getEndpoints']> {
  20. const {params, location} = this.props;
  21. return [['monitor', `/monitors/${params.monitorId}/`, {query: location.query}]];
  22. }
  23. getTitle() {
  24. if (this.state.monitor) {
  25. return `${this.state.monitor.name} - Monitors - ${this.props.params.orgId}`;
  26. }
  27. return `Monitors - ${this.props.params.orgId}`;
  28. }
  29. onUpdate = (data: Monitor) =>
  30. this.setState(state => ({monitor: {...state.monitor, ...data}}));
  31. renderBody() {
  32. const {monitor} = this.state;
  33. if (monitor === null) {
  34. return null;
  35. }
  36. return (
  37. <Fragment>
  38. <MonitorHeader
  39. monitor={monitor}
  40. orgId={this.props.params.orgId}
  41. onUpdate={this.onUpdate}
  42. />
  43. <Layout.Body>
  44. <Layout.Main fullWidth>
  45. {!monitor.lastCheckIn && <MonitorOnboarding monitor={monitor} />}
  46. <MonitorStats monitor={monitor} />
  47. <MonitorIssues monitor={monitor} orgId={this.props.params.orgId} />
  48. <Panel>
  49. <PanelHeader>{t('Recent Check-ins')}</PanelHeader>
  50. <MonitorCheckIns monitor={monitor} />
  51. </Panel>
  52. </Layout.Main>
  53. </Layout.Body>
  54. </Fragment>
  55. );
  56. }
  57. }
  58. export default MonitorDetails;