diff --git a/static/app/views/settings/organizationIntegrations/configureIntegration.tsx b/static/app/views/settings/organizationIntegrations/configureIntegration.tsx index 61f45b8a3ddf45..54d4402660bb0b 100644 --- a/static/app/views/settings/organizationIntegrations/configureIntegration.tsx +++ b/static/app/views/settings/organizationIntegrations/configureIntegration.tsx @@ -25,6 +25,7 @@ import type { } from 'sentry/types/integrations'; import type {RouteComponentProps} from 'sentry/types/legacyReactRouter'; import type {Organization} from 'sentry/types/organization'; +import {isActiveSuperuser} from 'sentry/utils/isActiveSuperuser'; import {singleLineRenderer} from 'sentry/utils/marked/marked'; import type {ApiQueryKey} from 'sentry/utils/queryClient'; import {setApiQueryData, useApiQuery, useQueryClient} from 'sentry/utils/queryClient'; @@ -127,7 +128,11 @@ function ConfigureIntegration({params, router, routes, location}: Props) { useEffect(() => { // This page should not be accessible by members (unless its github or gitlab) const allowMemberConfiguration = ['github', 'gitlab'].includes(providerKey); - if (!allowMemberConfiguration && !organization.access.includes('org:integrations')) { + if ( + !allowMemberConfiguration && + !organization.access.includes('org:integrations') && + !isActiveSuperuser() + ) { router.push( normalizeUrl({ pathname: `/settings/${organization.slug}/integrations/${providerKey}/`, diff --git a/static/app/views/settings/organizationIntegrations/installedIntegration.tsx b/static/app/views/settings/organizationIntegrations/installedIntegration.tsx index 60b8cfbf89481b..8ffda1c6b53d58 100644 --- a/static/app/views/settings/organizationIntegrations/installedIntegration.tsx +++ b/static/app/views/settings/organizationIntegrations/installedIntegration.tsx @@ -17,6 +17,7 @@ import type {Integration, IntegrationProvider} from 'sentry/types/integrations'; import type {Organization} from 'sentry/types/organization'; import type {IntegrationAnalyticsKey} from 'sentry/utils/analytics/integrations'; import {getIntegrationStatus} from 'sentry/utils/integrationUtil'; +import {isActiveSuperuser} from 'sentry/utils/isActiveSuperuser'; import {AddIntegrationButton} from './addIntegrationButton'; import IntegrationItem from './integrationItem'; @@ -114,6 +115,9 @@ export default class InstalledIntegration extends Component { return ( {({hasAccess}) => { + const superuser = isActiveSuperuser(); + const canConfigure = + (hasAccess || superuser) && this.integrationStatus === 'active'; const disableAction = !(hasAccess && this.integrationStatus === 'active'); return ( @@ -122,7 +126,7 @@ export default class InstalledIntegration extends Component {
{ } - disabled={!allowMemberConfiguration && disableAction} + disabled={!allowMemberConfiguration && !canConfigure} to={`/settings/${organization.slug}/integrations/${provider.key}/${integration.id}/`} data-test-id="integration-configure-button" > diff --git a/static/app/views/settings/organizationIntegrations/integrationDetailedView.tsx b/static/app/views/settings/organizationIntegrations/integrationDetailedView.tsx index 14cf30e940a5ce..f515e0df0b925d 100644 --- a/static/app/views/settings/organizationIntegrations/integrationDetailedView.tsx +++ b/static/app/views/settings/organizationIntegrations/integrationDetailedView.tsx @@ -12,6 +12,7 @@ import LoadingError from 'sentry/components/loadingError'; import LoadingIndicator from 'sentry/components/loadingIndicator'; import Panel from 'sentry/components/panels/panel'; import PanelItem from 'sentry/components/panels/panelItem'; +import SentryDocumentTitle from 'sentry/components/sentryDocumentTitle'; import {t} from 'sentry/locale'; import {PluginIcon} from 'sentry/plugins/components/pluginIcon'; import {space} from 'sentry/styles/space'; @@ -556,47 +557,49 @@ export default function IntegrationDetailedView() { } return ( - } - topSection={ - } - addInstallButton={ - - } - additionalCTA={ - - } - /> - } - tabs={renderTabs()} - content={ - activeTab === 'overview' ? ( - + } + topSection={ + } + addInstallButton={ + + } + additionalCTA={ + + } /> - ) : activeTab === 'configurations' ? ( - renderConfigurations() - ) : ( - renderFeatures() - ) - } - /> + } + tabs={renderTabs()} + content={ + activeTab === 'overview' ? ( + + ) : activeTab === 'configurations' ? ( + renderConfigurations() + ) : ( + renderFeatures() + ) + } + /> + ); }