import {Fragment} from 'react'; import type {RouteComponentProps} from 'react-router'; import {browserHistory} 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 type {Organization, Project} from 'sentry/types'; import {trackAnalytics} from 'sentry/utils/analytics'; import useApi from 'sentry/utils/useApi'; import useOrganization from 'sentry/utils/useOrganization'; 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 {OrganizationRegionAction} from 'sentry/views/settings/organizationGeneralSettings/organizationRegionAction'; import OrganizationSettingsForm from './organizationSettingsForm'; type Props = { projects: Project[]; } & RouteComponentProps<{}, {}>; function OrganizationGeneralSettings({projects}: Props) { const api = useApi(); const organization = useOrganization(); 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['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`, }); }; const organizationRegionInfo = OrganizationRegionAction({ organization, }); return (
{organization.access.includes('org:admin') && !organization.isDefault && ( {t('Remove Organization')}
)}
); } export default withProjects(OrganizationGeneralSettings);