import {Fragment} from 'react'; import {addErrorMessage, addSuccessMessage} from 'sentry/actionCreators/indicator'; import type {ModalRenderProps} from 'sentry/actionCreators/modal'; import FieldFromConfig from 'sentry/components/forms/fieldFromConfig'; import Form from 'sentry/components/forms/form'; import type {Field} from 'sentry/components/forms/types'; import {t} from 'sentry/locale'; import type {Organization, Project} from 'sentry/types'; import useApi from 'sentry/utils/useApi'; export type CreateReleaseIntegrationModalOptions = { onCancel: () => void; onCreateSuccess: (integration) => void; organization: Organization; project: Project; }; type CreateReleaseIntegrationModalProps = CreateReleaseIntegrationModalOptions & ModalRenderProps; function CreateReleaseIntegrationModal({ Body, Header, closeModal, project, organization, onCreateSuccess, onCancel, }: CreateReleaseIntegrationModalProps) { const api = useApi(); const fields: Field[] = [ { name: 'name', type: 'string', placeholder: `${project.slug} Release Integration`, label: t('Name'), help: {t('Name of new integration.')}, defaultValue: `${project.slug} Release Integration`, required: true, }, ]; return (

{t('Create a Release Integration')}

{ onCancel(); closeModal(); }} onSubmit={async (data, onSubmitSuccess, onSubmitError) => { try { const integration = await api.requestPromise('/sentry-apps/', { method: 'POST', data: { ...data, organization: organization.slug, isAlertable: false, isInternal: true, scopes: [ 'project:read', 'project:write', 'team:read', 'team:write', 'project:releases', 'event:read', 'event:write', 'org:read', 'org:write', 'member:read', 'member:write', ], verifyInstall: false, overview: `This internal integration was auto-generated to setup Releases for the ${project.slug} project. It is needed to provide the token used to create a release. If this integration is deleted, your Releases workflow will stop working!`, }, }); onSubmitSuccess(integration); } catch (error) { onSubmitError(error); } }} onSubmitSuccess={data => { onCreateSuccess(data); addSuccessMessage(t('Created Release Integration')); closeModal(); }} onSubmitError={() => { addErrorMessage(t('Something went wrong!')); }} > {fields.map(field => ( ))}
); } export default CreateReleaseIntegrationModal;