import {Fragment} from 'react'; import {browserHistory, RouteComponentProps} from 'react-router'; import {addLoadingMessage} from 'sentry/actionCreators/indicator'; import { changeOrganizationSlug, removeAndRedirectToRemainingOrganization, updateOrganization, } from 'sentry/actionCreators/organizations'; import {Button} from 'sentry/components/button'; import Confirm from 'sentry/components/confirm'; import FieldGroup from 'sentry/components/forms/fieldGroup'; import List from 'sentry/components/list'; import ListItem from 'sentry/components/list/listItem'; import Panel from 'sentry/components/panels/panel'; import PanelHeader from 'sentry/components/panels/panelHeader'; import SentryDocumentTitle from 'sentry/components/sentryDocumentTitle'; import {t, tct} from 'sentry/locale'; import {Organization, Project} from 'sentry/types'; import {trackAnalytics} from 'sentry/utils/analytics'; import useApi from 'sentry/utils/useApi'; import withOrganization from 'sentry/utils/withOrganization'; import withProjects from 'sentry/utils/withProjects'; import SettingsPageHeader from 'sentry/views/settings/components/settingsPageHeader'; import TextBlock from 'sentry/views/settings/components/text/textBlock'; import PermissionAlert from 'sentry/views/settings/organization/permissionAlert'; import OrganizationSettingsForm from './organizationSettingsForm'; type Props = { organization: Organization; projects: Project[]; } & RouteComponentProps<{}, {}>; function OrganizationGeneralSettings(props: Props) { const api = useApi(); const {organization, projects} = props; const access = new Set(organization.access); const removeConfirmMessage = ( {tct( 'Removing the organization, [name] is permanent and cannot be undone! Are you sure you want to continue?', { name: organization && {organization.name}, } )} {!!projects.length && ( {t('This will also remove the following associated projects:')} {projects.map(project => ( {project.slug} ))} )} ); const handleSaveForm: React.ComponentProps< typeof OrganizationSettingsForm >['onSave'] = (prevData: Organization, updated: Organization) => { if (updated.slug && updated.slug !== prevData.slug) { changeOrganizationSlug(prevData, updated); if (updated.features.includes('customer-domains')) { const {organizationUrl} = updated.links; window.location.replace(`${organizationUrl}/settings/organization/`); } else { browserHistory.replace(`/settings/${updated.slug}/`); } } else { if (prevData.codecovAccess !== updated.codecovAccess) { trackAnalytics('organization_settings.codecov_access_updated', { organization: updated, has_access: updated.codecovAccess, }); } // This will update OrganizationStore (as well as OrganizationsStore // which is slightly incorrect because it has summaries vs a detailed org) updateOrganization(updated); } }; const handleConfirmRemoveOrg = () => { if (!organization) { return; } addLoadingMessage(); removeAndRedirectToRemainingOrganization(api, { orgId: organization.slug, successMessage: `${organization.name} is queued for deletion.`, errorMessage: `Error removing the ${organization.name} organization`, }); }; return (
{access.has('org:admin') && !organization.isDefault && ( {t('Remove Organization')}
)}
); } export default withProjects(withOrganization(OrganizationGeneralSettings));