import {Fragment} from 'react'; import {browserHistory, RouteComponentProps} from 'react-router'; import {addErrorMessage, addSuccessMessage} from 'sentry/actionCreators/indicator'; import {removeTeam, updateTeamSuccess} from 'sentry/actionCreators/teams'; import {hasEveryAccess} from 'sentry/components/acl/access'; import {Button} from 'sentry/components/button'; import Confirm from 'sentry/components/confirm'; import FieldGroup from 'sentry/components/forms/fieldGroup'; import Form, {FormProps} from 'sentry/components/forms/form'; import JsonForm from 'sentry/components/forms/jsonForm'; import Panel from 'sentry/components/panels/panel'; import PanelHeader from 'sentry/components/panels/panelHeader'; import SentryDocumentTitle from 'sentry/components/sentryDocumentTitle'; import teamSettingsFields from 'sentry/data/forms/teamSettingsFields'; import {IconDelete} from 'sentry/icons'; import {t, tct} from 'sentry/locale'; import {Team} from 'sentry/types'; import useApi from 'sentry/utils/useApi'; import useOrganization from 'sentry/utils/useOrganization'; import {normalizeUrl} from 'sentry/utils/withDomainRequired'; import PermissionAlert from 'sentry/views/settings/project/permissionAlert'; interface TeamSettingsProps extends RouteComponentProps<{teamId: string}, {}> { team: Team; } function TeamSettings({team, params}: TeamSettingsProps) { const organization = useOrganization(); const api = useApi(); const handleSubmitSuccess: FormProps['onSubmitSuccess'] = (resp: Team, _model, id) => { // Use the old slug when triggering the update so we correctly replace the // previous team in the store updateTeamSuccess(team.slug, resp); if (id === 'slug') { addSuccessMessage(t('Team name changed')); browserHistory.replace( normalizeUrl(`/settings/${organization.slug}/teams/${resp.slug}/settings/`) ); } }; const handleRemoveTeam = async () => { try { await removeTeam(api, {orgId: organization.slug, teamId: params.teamId}); browserHistory.replace(normalizeUrl(`/settings/${organization.slug}/teams/`)); } catch { // removeTeam already displays an error message } }; const idpProvisioned = team.flags['idp:provisioned']; const orgRoleList = organization.orgRoleList; const hasOrgRoleFlag = organization.features.includes('org-roles-for-teams'); const hasTeamWrite = hasEveryAccess(['team:write'], {organization, team}); const hasTeamAdmin = hasEveryAccess(['team:admin'], {organization, team}); const hasOrgAdmin = hasEveryAccess(['org:admin'], {organization}); return (
addErrorMessage(t('Unable to save change'))} initialData={{ name: team.name, slug: team.slug, orgRole: team.orgRole, }} > {t('Team Administration')}
); } export default TeamSettings;