edit.tsx 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import {browserHistory, RouteComponentProps} from 'react-router';
  2. import * as Layout from 'sentry/components/layouts/thirds';
  3. import {t} from 'sentry/locale';
  4. import AsyncView from 'sentry/views/asyncView';
  5. import MonitorForm from './monitorForm';
  6. import {Monitor} from './types';
  7. type Props = AsyncView['props'] &
  8. RouteComponentProps<{monitorId: string; orgId: string}, {}>;
  9. type State = AsyncView['state'] & {
  10. monitor: Monitor | null;
  11. };
  12. export default class EditMonitor extends AsyncView<Props, State> {
  13. getEndpoints(): ReturnType<AsyncView['getEndpoints']> {
  14. const {params} = this.props;
  15. return [['monitor', `/monitors/${params.monitorId}/`]];
  16. }
  17. onUpdate = (data: Monitor) =>
  18. this.setState(state => ({monitor: {...state.monitor, ...data}}));
  19. onSubmitSuccess = (data: Monitor) =>
  20. browserHistory.push(`/organizations/${this.props.params.orgId}/monitors/${data.id}/`);
  21. getTitle() {
  22. if (this.state.monitor) {
  23. return `${this.state.monitor.name} - Monitors - ${this.props.params.orgId}`;
  24. }
  25. return `Monitors - ${this.props.params.orgId}`;
  26. }
  27. renderBody() {
  28. const {monitor} = this.state;
  29. if (monitor === null) {
  30. return null;
  31. }
  32. return (
  33. <Layout.Body>
  34. <Layout.Main fullWidth>
  35. <h1>{t('Edit Monitor')}</h1>
  36. <MonitorForm
  37. monitor={monitor}
  38. apiMethod="PUT"
  39. apiEndpoint={`/monitors/${monitor.id}/`}
  40. onSubmitSuccess={this.onSubmitSuccess}
  41. />
  42. </Layout.Main>
  43. </Layout.Body>
  44. );
  45. }
  46. }