import {addErrorMessage} from 'sentry/actionCreators/indicator'; import { useAddTeamToProject, useFetchProjectTeams, useRemoveTeamFromProject, } from 'sentry/actionCreators/projects'; import {hasEveryAccess} from 'sentry/components/acl/access'; import LoadingError from 'sentry/components/loadingError'; import LoadingIndicator from 'sentry/components/loadingIndicator'; import SentryDocumentTitle from 'sentry/components/sentryDocumentTitle'; import {t, tct} from 'sentry/locale'; import TeamStore from 'sentry/stores/teamStore'; import type {Organization} from 'sentry/types/organization'; import type {Project} from 'sentry/types/project'; import routeTitleGen from 'sentry/utils/routeTitle'; import SettingsPageHeader from 'sentry/views/settings/components/settingsPageHeader'; import TeamSelectForProject from 'sentry/views/settings/components/teamSelect/teamSelectForProject'; import TextBlock from 'sentry/views/settings/components/text/textBlock'; import PermissionAlert from 'sentry/views/settings/project/permissionAlert'; type ProjectTeamsProps = { organization: Organization; project: Project; }; export function ProjectTeams({organization, project}: ProjectTeamsProps) { const { data: projectTeams, isPending, isError, } = useFetchProjectTeams({orgSlug: organization.slug, projectSlug: project.slug}); const handleAddTeamToProject = useAddTeamToProject({ orgSlug: organization.slug, projectSlug: project.slug, }); const handleRemoveTeamFromProject = useRemoveTeamFromProject({ orgSlug: organization.slug, projectSlug: project.slug, }); const canCreateTeam = organization.access.includes('org:write') && organization.access.includes('team:write') && organization.access.includes('project:write'); const hasWriteAccess = hasEveryAccess(['project:write'], {organization, project}); if (isError) { return ; } if (isPending) { return ; } return (
{t( 'These teams and their members have access to this project. They can be assigned to issues and alerts created in it.' )} {t( 'Team Admins can grant other teams access to this project. However, they cannot revoke access unless they are admins for the other teams too.' )} { const team = TeamStore.getBySlug(teamSlug); if (!team) { addErrorMessage(tct('Unable to find "[teamSlug]"', {teamSlug})); return; } handleAddTeamToProject(team); }} onRemoveTeam={handleRemoveTeamFromProject} onCreateTeam={handleAddTeamToProject} />
); } export default ProjectTeams;