repositoryEditForm.tsx 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. import {Component} from 'react';
  2. import ExternalLink from 'sentry/components/links/externalLink';
  3. import {IconWarning} from 'sentry/icons';
  4. import {t, tct} from 'sentry/locale';
  5. import {Repository} from 'sentry/types';
  6. import {FieldFromConfig} from 'sentry/views/settings/components/forms';
  7. import Form from 'sentry/views/settings/components/forms/form';
  8. import {Field} from 'sentry/views/settings/components/forms/type';
  9. import Alert from './alert';
  10. type Props = Pick<Form['props'], 'onSubmitSuccess' | 'onCancel'> & {
  11. closeModal: () => void;
  12. onSubmitSuccess: (data: any) => void;
  13. orgSlug: string;
  14. repository: Repository;
  15. };
  16. export default class RepositoryEditForm extends Component<Props> {
  17. get initialData() {
  18. const {repository} = this.props;
  19. return {
  20. name: repository.name,
  21. url: repository.url || '',
  22. };
  23. }
  24. get formFields(): Field[] {
  25. const fields: any[] = [
  26. {
  27. name: 'name',
  28. type: 'string',
  29. required: true,
  30. label: t('Name of your repository.'),
  31. },
  32. {
  33. name: 'url',
  34. type: 'string',
  35. required: false,
  36. label: t('Full URL to your repository.'),
  37. placeholder: t('https://github.com/my-org/my-repo/'),
  38. },
  39. ];
  40. return fields;
  41. }
  42. render() {
  43. const {onCancel, orgSlug, repository} = this.props;
  44. const endpoint = `/organizations/${orgSlug}/repos/${repository.id}/`;
  45. return (
  46. <Form
  47. initialData={this.initialData}
  48. onSubmitSuccess={data => {
  49. this.props.onSubmitSuccess(data);
  50. this.props.closeModal();
  51. }}
  52. apiEndpoint={endpoint}
  53. apiMethod="PUT"
  54. onCancel={onCancel}
  55. >
  56. <Alert type="warning" icon={<IconWarning />}>
  57. {tct(
  58. 'Changing the [name:repo name] may have consequences if it no longer matches the repo name used when [link:sending commits with releases].',
  59. {
  60. link: (
  61. <ExternalLink href="https://docs.sentry.io/product/cli/releases/#sentry-cli-commit-integration" />
  62. ),
  63. name: <strong>repo name</strong>,
  64. }
  65. )}
  66. </Alert>
  67. {this.formFields.map(field => (
  68. <FieldFromConfig
  69. key={field.name}
  70. field={field}
  71. inline={false}
  72. stacked
  73. flexibleControlStateSize
  74. />
  75. ))}
  76. </Form>
  77. );
  78. }
  79. }