From e60e3650e36f3f8fdf7fe09c124f50ace5439557 Mon Sep 17 00:00:00 2001 From: Evan Purkhiser Date: Fri, 3 Jan 2025 18:40:34 -0500 Subject: [PATCH 1/2] ref(js): Remove most deprecatedAsyncView usages --- .../views/acceptOrganizationInvite/index.tsx | 14 ++++---- .../app/views/acceptProjectTransfer/index.tsx | 10 +++--- .../app/views/admin/installWizard/index.tsx | 16 ++++----- static/app/views/alerts/rules/issue/index.tsx | 28 ++++++--------- .../alerts/rules/issue/ticketRuleModal.tsx | 4 +-- .../integrationOrganizationLink/index.tsx | 14 ++++---- .../views/releases/detail/overview/index.tsx | 4 +-- static/app/views/releases/list/index.tsx | 17 ++++------ .../accountSecurity/accountSecurityEnroll.tsx | 20 +++++------ .../settings/organizationApiKeys/index.tsx | 34 +++++++++---------- .../organizationApiKeyDetails.tsx | 15 ++++---- .../views/settings/organizationAuth/index.tsx | 24 +++++++------ .../organizationDeveloperSettings/index.tsx | 21 ++++++------ .../sentryApplicationDashboard/index.tsx | 14 ++++---- .../organizationTeams/teamNotifications.tsx | 13 +++---- .../project/projectKeys/list/index.tsx | 16 ++++----- .../project/projectReleaseTracking.tsx | 16 ++++----- .../settings/projectGeneralSettings/index.tsx | 18 ++++------ .../projectPerformance/projectPerformance.tsx | 23 +++++-------- .../views/settings/projectPlugins/details.tsx | 18 ++++------ 20 files changed, 144 insertions(+), 195 deletions(-) diff --git a/static/app/views/acceptOrganizationInvite/index.tsx b/static/app/views/acceptOrganizationInvite/index.tsx index 5c8d94391208cd..a98415f173e249 100644 --- a/static/app/views/acceptOrganizationInvite/index.tsx +++ b/static/app/views/acceptOrganizationInvite/index.tsx @@ -4,15 +4,16 @@ import styled from '@emotion/styled'; import {logout} from 'sentry/actionCreators/account'; import {Alert} from 'sentry/components/alert'; import {Button, LinkButton} from 'sentry/components/button'; +import DeprecatedAsyncComponent from 'sentry/components/deprecatedAsyncComponent'; import ExternalLink from 'sentry/components/links/externalLink'; import Link from 'sentry/components/links/link'; import NarrowLayout from 'sentry/components/narrowLayout'; +import SentryDocumentTitle from 'sentry/components/sentryDocumentTitle'; import {t, tct} from 'sentry/locale'; import ConfigStore from 'sentry/stores/configStore'; import {space} from 'sentry/styles/space'; import type {RouteComponentProps} from 'sentry/types/legacyReactRouter'; import {browserHistory} from 'sentry/utils/browserHistory'; -import DeprecatedAsyncView from 'sentry/views/deprecatedAsyncView'; import SettingsPageHeader from 'sentry/views/settings/components/settingsPageHeader'; type InviteDetails = { @@ -27,13 +28,13 @@ type InviteDetails = { type Props = RouteComponentProps<{memberId: string; token: string; orgId?: string}, {}>; -type State = DeprecatedAsyncView['state'] & { +type State = DeprecatedAsyncComponent['state'] & { acceptError: boolean | undefined; accepting: boolean | undefined; inviteDetails: InviteDetails; }; -class AcceptOrganizationInvite extends DeprecatedAsyncView { +class AcceptOrganizationInvite extends DeprecatedAsyncComponent { disableErrorReport = false; get orgSlug(): string | null { @@ -48,7 +49,7 @@ class AcceptOrganizationInvite extends DeprecatedAsyncView { return null; } - getEndpoints(): ReturnType { + getEndpoints(): ReturnType { const {memberId, token} = this.props.params; if (this.orgSlug) { return [['inviteDetails', `/accept-invite/${this.orgSlug}/${memberId}/${token}/`]]; @@ -56,10 +57,6 @@ class AcceptOrganizationInvite extends DeprecatedAsyncView { return [['inviteDetails', `/accept-invite/${memberId}/${token}/`]]; } - getTitle() { - return t('Accept Organization Invite'); - } - handleLogout = (e: React.MouseEvent) => { e.preventDefault(); logout(this.api); @@ -287,6 +284,7 @@ class AcceptOrganizationInvite extends DeprecatedAsyncView { return ( + {acceptError && ( diff --git a/static/app/views/acceptProjectTransfer/index.tsx b/static/app/views/acceptProjectTransfer/index.tsx index d3ed15aad03ca0..0484c61fcb08e8 100644 --- a/static/app/views/acceptProjectTransfer/index.tsx +++ b/static/app/views/acceptProjectTransfer/index.tsx @@ -1,13 +1,14 @@ import {addErrorMessage} from 'sentry/actionCreators/indicator'; +import DeprecatedAsyncComponent from 'sentry/components/deprecatedAsyncComponent'; import SelectField from 'sentry/components/forms/fields/selectField'; import Form from 'sentry/components/forms/form'; import NarrowLayout from 'sentry/components/narrowLayout'; +import SentryDocumentTitle from 'sentry/components/sentryDocumentTitle'; import {t, tct} from 'sentry/locale'; import ConfigStore from 'sentry/stores/configStore'; import type {RouteComponentProps} from 'sentry/types/legacyReactRouter'; import type {Organization} from 'sentry/types/organization'; import type {Project} from 'sentry/types/project'; -import DeprecatedAsyncView from 'sentry/views/deprecatedAsyncView'; import SettingsPageHeader from 'sentry/views/settings/components/settingsPageHeader'; type Props = RouteComponentProps<{}, {}>; @@ -19,9 +20,9 @@ type TransferDetails = { type State = { transferDetails: TransferDetails | null; -} & DeprecatedAsyncView['state']; +} & DeprecatedAsyncComponent['state']; -class AcceptProjectTransfer extends DeprecatedAsyncView { +class AcceptProjectTransfer extends DeprecatedAsyncComponent { disableErrorReport = false; get regionHost(): string | undefined { @@ -37,7 +38,7 @@ class AcceptProjectTransfer extends DeprecatedAsyncView { return host; } - getEndpoints(): ReturnType { + getEndpoints(): ReturnType { const query = this.props.location.query; const host = this.regionHost; return [['transferDetails', '/accept-transfer/', {query, host}]]; @@ -101,6 +102,7 @@ class AcceptProjectTransfer extends DeprecatedAsyncView { return ( +

{tct( diff --git a/static/app/views/admin/installWizard/index.tsx b/static/app/views/admin/installWizard/index.tsx index f0dda6d86b9b3a..98d9d81352d193 100644 --- a/static/app/views/admin/installWizard/index.tsx +++ b/static/app/views/admin/installWizard/index.tsx @@ -4,17 +4,17 @@ import styled from '@emotion/styled'; import sentryPattern from 'sentry-images/pattern/sentry-pattern.png'; import {Alert} from 'sentry/components/alert'; +import DeprecatedAsyncComponent from 'sentry/components/deprecatedAsyncComponent'; import ApiForm from 'sentry/components/forms/apiForm'; import SentryDocumentTitle from 'sentry/components/sentryDocumentTitle'; import {t} from 'sentry/locale'; import ConfigStore from 'sentry/stores/configStore'; import {space} from 'sentry/styles/space'; -import DeprecatedAsyncView from 'sentry/views/deprecatedAsyncView'; import type {Field} from '../options'; import {getForm, getOptionDefault, getOptionField} from '../options'; -export type InstallWizardProps = DeprecatedAsyncView['props'] & { +export type InstallWizardProps = DeprecatedAsyncComponent['props'] & { onConfigured: () => void; }; @@ -26,15 +26,15 @@ export type InstallWizardOptions = Record< } >; -type State = DeprecatedAsyncView['state'] & { +type State = DeprecatedAsyncComponent['state'] & { data: null | InstallWizardOptions; }; -export default class InstallWizard extends DeprecatedAsyncView< +export default class InstallWizard extends DeprecatedAsyncComponent< InstallWizardProps, State > { - getEndpoints(): ReturnType { + getEndpoints(): ReturnType { return [['data', '/internal/options/?query=is:required']]; } @@ -95,14 +95,10 @@ export default class InstallWizard extends DeprecatedAsyncView< return data; } - getTitle() { - return t('Setup Sentry'); - } - render() { const version = ConfigStore.get('version'); return ( - + diff --git a/static/app/views/alerts/rules/issue/index.tsx b/static/app/views/alerts/rules/issue/index.tsx index acb9858f8c5f19..f042ab0c8e10b8 100644 --- a/static/app/views/alerts/rules/issue/index.tsx +++ b/static/app/views/alerts/rules/issue/index.tsx @@ -22,6 +22,7 @@ import AlertLink from 'sentry/components/alertLink'; import {Button} from 'sentry/components/button'; import Checkbox from 'sentry/components/checkbox'; import Confirm from 'sentry/components/confirm'; +import DeprecatedAsyncComponent from 'sentry/components/deprecatedAsyncComponent'; import ErrorBoundary from 'sentry/components/errorBoundary'; import SelectControl from 'sentry/components/forms/controls/selectControl'; import FieldGroup from 'sentry/components/forms/fieldGroup'; @@ -39,6 +40,7 @@ import ListItem from 'sentry/components/list/listItem'; import LoadingMask from 'sentry/components/loadingMask'; import Panel from 'sentry/components/panels/panel'; import PanelBody from 'sentry/components/panels/panelBody'; +import SentryDocumentTitle from 'sentry/components/sentryDocumentTitle'; import TeamSelector from 'sentry/components/teamSelector'; import {ALL_ENVIRONMENTS_KEY} from 'sentry/constants'; import {IconChevron, IconNot} from 'sentry/icons'; @@ -65,7 +67,6 @@ import {browserHistory} from 'sentry/utils/browserHistory'; import {getDisplayName} from 'sentry/utils/environment'; import {isActiveSuperuser} from 'sentry/utils/isActiveSuperuser'; import recreateRoute from 'sentry/utils/recreateRoute'; -import routeTitleGen from 'sentry/utils/routeTitle'; import normalizeUrl from 'sentry/utils/url/normalizeUrl'; import withOrganization from 'sentry/utils/withOrganization'; import withProjects from 'sentry/utils/withProjects'; @@ -78,7 +79,6 @@ import { CHANGE_ALERT_CONDITION_IDS, CHANGE_ALERT_PLACEHOLDERS_LABELS, } from 'sentry/views/alerts/utils/constants'; -import DeprecatedAsyncView from 'sentry/views/deprecatedAsyncView'; import PermissionAlert from 'sentry/views/settings/project/permissionAlert'; import {getProjectOptions} from '../utils'; @@ -148,7 +148,7 @@ type Props = { onChangeTitle?: (data: string) => void; } & RouteComponentProps; -type State = DeprecatedAsyncView['state'] & { +type State = DeprecatedAsyncComponent['state'] & { configs: IssueAlertConfiguration | null; detailedError: null | { [key: string]: string[]; @@ -172,7 +172,7 @@ function isSavedAlertRule(rule: State['rule']): rule is IssueAlertRule { */ const isExactDuplicateExp = /duplicate of '(.*)'/; -class IssueRuleEditor extends DeprecatedAsyncView { +class IssueRuleEditor extends DeprecatedAsyncComponent { pollingTimeout: number | undefined = undefined; trackIncompatibleAnalytics = false; trackNoisyWarningViewed = false; @@ -225,19 +225,6 @@ class IssueRuleEditor extends DeprecatedAsyncView { ); } - getTitle() { - const {organization} = this.props; - const {rule, project} = this.state; - const ruleName = rule?.name; - - return routeTitleGen( - ruleName ? t('Alert - %s', ruleName) : t('New Alert Rule'), - organization.slug, - false, - project?.slug - ); - } - getDefaultState() { const {userTeamIds, project} = this.props; const defaultState = { @@ -259,7 +246,7 @@ class IssueRuleEditor extends DeprecatedAsyncView { return defaultState; } - getEndpoints(): ReturnType { + getEndpoints(): ReturnType { const { location: {query}, params: {ruleId}, @@ -1190,6 +1177,11 @@ class IssueRuleEditor extends DeprecatedAsyncView { // a different key when we have fetched the rule so that form inputs are filled in return (

+ { }; } - getEndpoints(): ReturnType { + getEndpoints(): ReturnType { const {instance} = this.props; const query = (instance.dynamic_form_fields || []) .filter(field => field.updatesForm) diff --git a/static/app/views/integrationOrganizationLink/index.tsx b/static/app/views/integrationOrganizationLink/index.tsx index 23609b44bf2d51..3a21320d13a7e6 100644 --- a/static/app/views/integrationOrganizationLink/index.tsx +++ b/static/app/views/integrationOrganizationLink/index.tsx @@ -5,12 +5,14 @@ import {urlEncode} from '@sentry/utils'; import {addErrorMessage} from 'sentry/actionCreators/indicator'; import {Alert} from 'sentry/components/alert'; import {Button} from 'sentry/components/button'; +import DeprecatedAsyncComponent from 'sentry/components/deprecatedAsyncComponent'; import SelectControl from 'sentry/components/forms/controls/selectControl'; import FieldGroup from 'sentry/components/forms/fieldGroup'; import IdBadge from 'sentry/components/idBadge'; import ExternalLink from 'sentry/components/links/externalLink'; import LoadingIndicator from 'sentry/components/loadingIndicator'; import NarrowLayout from 'sentry/components/narrowLayout'; +import SentryDocumentTitle from 'sentry/components/sentryDocumentTitle'; import {t, tct} from 'sentry/locale'; import ConfigStore from 'sentry/stores/configStore'; import type {Integration, IntegrationProvider} from 'sentry/types/integrations'; @@ -24,14 +26,13 @@ import { } from 'sentry/utils/integrationUtil'; import {singleLineRenderer} from 'sentry/utils/marked'; import normalizeUrl from 'sentry/utils/url/normalizeUrl'; -import DeprecatedAsyncView from 'sentry/views/deprecatedAsyncView'; import {DisabledNotice} from 'sentry/views/settings/organizationIntegrations/abstractIntegrationDetailedView'; import AddIntegration from 'sentry/views/settings/organizationIntegrations/addIntegration'; // installationId present for Github flow type Props = RouteComponentProps<{integrationSlug: string; installationId?: string}, {}>; -type State = DeprecatedAsyncView['state'] & { +type State = DeprecatedAsyncComponent['state'] & { installationData?: GitHubIntegrationInstallation; installationDataLoading?: boolean; organization?: Organization; @@ -50,20 +51,16 @@ interface GitHubIntegrationInstallation { }; } -export default class IntegrationOrganizationLink extends DeprecatedAsyncView< +export default class IntegrationOrganizationLink extends DeprecatedAsyncComponent< Props, State > { disableErrorReport = false; - getEndpoints(): ReturnType { + getEndpoints(): ReturnType { return [['organizations', '/organizations/?include_feature_flags=1']]; } - getTitle() { - return t('Choose Installation Organization'); - } - trackIntegrationAnalytics = ( eventName: IntegrationAnalyticsKey, startSession?: boolean @@ -380,6 +377,7 @@ export default class IntegrationOrganizationLink extends DeprecatedAsyncView< return ( +

{t('Finish integration installation')}

{this.renderCallout()}

diff --git a/static/app/views/releases/detail/overview/index.tsx b/static/app/views/releases/detail/overview/index.tsx index cf2fd31e977256..f9fe988922446b 100644 --- a/static/app/views/releases/detail/overview/index.tsx +++ b/static/app/views/releases/detail/overview/index.tsx @@ -9,6 +9,7 @@ import Feature from 'sentry/components/acl/feature'; import SessionsRequest from 'sentry/components/charts/sessionsRequest'; import type {DateTimeObject} from 'sentry/components/charts/utils'; import {DateTime} from 'sentry/components/dateTime'; +import DeprecatedAsyncComponent from 'sentry/components/deprecatedAsyncComponent'; import PerformanceCardTable from 'sentry/components/discover/performanceCardTable'; import type {DropdownOption} from 'sentry/components/discover/transactionsList'; import TransactionsList from 'sentry/components/discover/transactionsList'; @@ -35,7 +36,6 @@ import {formatVersion} from 'sentry/utils/versions/formatVersion'; import withApi from 'sentry/utils/withApi'; import withOrganization from 'sentry/utils/withOrganization'; import withPageFilters from 'sentry/utils/withPageFilters'; -import DeprecatedAsyncView from 'sentry/views/deprecatedAsyncView'; import { DisplayModes, transactionSummaryRouteWithQuery, @@ -84,7 +84,7 @@ type Props = RouteComponentProps & { selection: PageFilters; }; -class ReleaseOverview extends DeprecatedAsyncView { +class ReleaseOverview extends DeprecatedAsyncComponent { getTitle() { const {params, organization} = this.props; return routeTitleGen( diff --git a/static/app/views/releases/list/index.tsx b/static/app/views/releases/list/index.tsx index 534d12127c2c2c..87532b3b1971c9 100644 --- a/static/app/views/releases/list/index.tsx +++ b/static/app/views/releases/list/index.tsx @@ -7,6 +7,7 @@ import {fetchTagValues} from 'sentry/actionCreators/tags'; import type {Client} from 'sentry/api'; import {Alert} from 'sentry/components/alert'; import GuideAnchor from 'sentry/components/assistant/guideAnchor'; +import DeprecatedAsyncComponent from 'sentry/components/deprecatedAsyncComponent'; import EmptyMessage from 'sentry/components/emptyMessage'; import FloatingFeedbackWidget from 'sentry/components/feedback/widget/floatingFeedbackWidget'; import * as Layout from 'sentry/components/layouts/thirds'; @@ -22,6 +23,7 @@ import {ProjectPageFilter} from 'sentry/components/organizations/projectPageFilt import Pagination from 'sentry/components/pagination'; import Panel from 'sentry/components/panels/panel'; import {SearchQueryBuilder} from 'sentry/components/searchQueryBuilder'; +import SentryDocumentTitle from 'sentry/components/sentryDocumentTitle'; import {getRelativeSummary} from 'sentry/components/timeRangeSelector/utils'; import {DEFAULT_STATS_PERIOD} from 'sentry/constants'; import {ALL_ACCESS_PROJECTS} from 'sentry/constants/pageFilters'; @@ -40,12 +42,10 @@ import {ReleaseStatus} from 'sentry/types/release'; import {trackAnalytics} from 'sentry/utils/analytics'; import {SEMVER_TAGS} from 'sentry/utils/discover/fields'; import Projects from 'sentry/utils/projects'; -import routeTitleGen from 'sentry/utils/routeTitle'; import withApi from 'sentry/utils/withApi'; import withOrganization from 'sentry/utils/withOrganization'; import withPageFilters from 'sentry/utils/withPageFilters'; import withProjects from 'sentry/utils/withProjects'; -import DeprecatedAsyncView from 'sentry/views/deprecatedAsyncView'; import Header from '../components/header'; import ReleaseArchivedNotice from '../detail/overview/releaseArchivedNotice'; @@ -72,9 +72,9 @@ type Props = RouteComponentProps & { type State = { releases: Release[]; -} & DeprecatedAsyncView['state']; +} & DeprecatedAsyncComponent['state']; -class ReleasesList extends DeprecatedAsyncView { +class ReleasesList extends DeprecatedAsyncComponent { shouldReload = true; shouldRenderBadRequests = true; @@ -89,11 +89,7 @@ class ReleasesList extends DeprecatedAsyncView { return acc; }, {}); - getTitle() { - return routeTitleGen(t('Releases'), this.props.organization.slug, false); - } - - getEndpoints(): ReturnType { + getEndpoints(): ReturnType { const {organization, location} = this.props; const {statsPeriod} = location.query; const activeSort = this.getSort(); @@ -111,7 +107,7 @@ class ReleasesList extends DeprecatedAsyncView { : ReleaseStatus.ACTIVE, }; - const endpoints: ReturnType = [ + const endpoints: ReturnType = [ [ 'releases', // stateKey `/organizations/${organization.slug}/releases/`, // endpoint @@ -551,6 +547,7 @@ class ReleasesList extends DeprecatedAsyncView { return ( +

diff --git a/static/app/views/settings/account/accountSecurity/accountSecurityEnroll.tsx b/static/app/views/settings/account/accountSecurity/accountSecurityEnroll.tsx index c291a2fd734dc3..760d246346628c 100644 --- a/static/app/views/settings/account/accountSecurity/accountSecurityEnroll.tsx +++ b/static/app/views/settings/account/accountSecurity/accountSecurityEnroll.tsx @@ -16,6 +16,7 @@ import {Alert} from 'sentry/components/alert'; import {Button} from 'sentry/components/button'; import ButtonBar from 'sentry/components/buttonBar'; import CircleIndicator from 'sentry/components/circleIndicator'; +import DeprecatedAsyncComponent from 'sentry/components/deprecatedAsyncComponent'; import FieldGroup from 'sentry/components/forms/fieldGroup'; import type {FormProps} from 'sentry/components/forms/form'; import Form from 'sentry/components/forms/form'; @@ -23,6 +24,7 @@ import JsonForm from 'sentry/components/forms/jsonForm'; import FormModel from 'sentry/components/forms/model'; import type {FieldObject} from 'sentry/components/forms/types'; import PanelItem from 'sentry/components/panels/panelItem'; +import SentryDocumentTitle from 'sentry/components/sentryDocumentTitle'; import TextCopyInput from 'sentry/components/textCopyInput'; import U2fSign from 'sentry/components/u2f/u2fsign'; import {t} from 'sentry/locale'; @@ -34,7 +36,6 @@ import {generateOrgSlugUrl} from 'sentry/utils'; import getPendingInvite from 'sentry/utils/getPendingInvite'; // eslint-disable-next-line no-restricted-imports import withSentryRouter from 'sentry/utils/withSentryRouter'; -import DeprecatedAsyncView from 'sentry/views/deprecatedAsyncView'; import RemoveConfirm from 'sentry/views/settings/account/accountSecurity/components/removeConfirm'; import SettingsPageHeader from 'sentry/views/settings/components/settingsPageHeader'; import TextBlock from 'sentry/views/settings/components/text/textBlock'; @@ -142,9 +143,10 @@ const getFields = ({ return null; }; -type Props = DeprecatedAsyncView['props'] & WithRouterProps<{authId: string}, {}> & {}; +type Props = DeprecatedAsyncComponent['props'] & + WithRouterProps<{authId: string}, {}> & {}; -type State = DeprecatedAsyncView['state'] & { +type State = DeprecatedAsyncComponent['state'] & { authenticator: Authenticator | null; hasSentCode: boolean; sendingCode: boolean; @@ -155,13 +157,9 @@ type PendingInvite = ReturnType; /** * Renders necessary forms in order to enroll user in 2fa */ -class AccountSecurityEnroll extends DeprecatedAsyncView { +class AccountSecurityEnroll extends DeprecatedAsyncComponent { formModel = new FormModel(); - getTitle() { - return t('Security'); - } - getDefaultState() { return {...super.getDefaultState(), hasSentCode: false}; } @@ -174,7 +172,7 @@ class AccountSecurityEnroll extends DeprecatedAsyncView { return `${this.authenticatorEndpoint}enroll/`; } - getEndpoints(): ReturnType { + getEndpoints(): ReturnType { const errorHandler = (err: any) => { const alreadyEnrolled = err && @@ -427,7 +425,7 @@ class AccountSecurityEnroll extends DeprecatedAsyncView { const isActive = authenticator.isEnrolled || authenticator.status === 'rotation'; return ( - + @@ -474,7 +472,7 @@ class AccountSecurityEnroll extends DeprecatedAsyncView { )} - + ); } } diff --git a/static/app/views/settings/organizationApiKeys/index.tsx b/static/app/views/settings/organizationApiKeys/index.tsx index d79dd06e73b843..7ea7f3929ed65c 100644 --- a/static/app/views/settings/organizationApiKeys/index.tsx +++ b/static/app/views/settings/organizationApiKeys/index.tsx @@ -1,12 +1,12 @@ import {addErrorMessage, addSuccessMessage} from 'sentry/actionCreators/indicator'; +import DeprecatedAsyncComponent from 'sentry/components/deprecatedAsyncComponent'; +import SentryDocumentTitle from 'sentry/components/sentryDocumentTitle'; import {t} from 'sentry/locale'; import type {RouteComponentProps} from 'sentry/types/legacyReactRouter'; import type {Organization} from 'sentry/types/organization'; import {browserHistory} from 'sentry/utils/browserHistory'; import recreateRoute from 'sentry/utils/recreateRoute'; -import routeTitleGen from 'sentry/utils/routeTitle'; import withOrganization from 'sentry/utils/withOrganization'; -import DeprecatedAsyncView from 'sentry/views/deprecatedAsyncView'; import OrganizationApiKeysList from './organizationApiKeysList'; import type {DeprecatedApiKey} from './types'; @@ -17,21 +17,17 @@ type Props = RouteComponentProps<{}, {}> & { type State = { keys: DeprecatedApiKey[]; -} & DeprecatedAsyncView['state']; +} & DeprecatedAsyncComponent['state']; /** * API Keys are deprecated, but there may be some legacy customers that still use it */ -class OrganizationApiKeys extends DeprecatedAsyncView { - getEndpoints(): ReturnType { +class OrganizationApiKeys extends DeprecatedAsyncComponent { + getEndpoints(): ReturnType { const {organization} = this.props; return [['keys', `/organizations/${organization.slug}/api-keys/`]]; } - getTitle() { - return routeTitleGen(t('API Keys'), this.props.organization.slug, false); - } - handleRemove = async (id: string) => { const {organization} = this.props; const oldKeys = [...this.state.keys]; @@ -93,15 +89,17 @@ class OrganizationApiKeys extends DeprecatedAsyncView { const params = {orgId: organization.slug}; return ( - + + + ); } } diff --git a/static/app/views/settings/organizationApiKeys/organizationApiKeyDetails.tsx b/static/app/views/settings/organizationApiKeys/organizationApiKeyDetails.tsx index 27df7460efbb13..42eefdf608878d 100644 --- a/static/app/views/settings/organizationApiKeys/organizationApiKeyDetails.tsx +++ b/static/app/views/settings/organizationApiKeys/organizationApiKeyDetails.tsx @@ -1,4 +1,5 @@ import {addErrorMessage, addSuccessMessage} from 'sentry/actionCreators/indicator'; +import DeprecatedAsyncComponent from 'sentry/components/deprecatedAsyncComponent'; import ApiForm from 'sentry/components/forms/apiForm'; import MultipleCheckbox from 'sentry/components/forms/controls/multipleCheckbox'; import TextareaField from 'sentry/components/forms/fields/textareaField'; @@ -7,14 +8,13 @@ import FormField from 'sentry/components/forms/formField'; import Panel from 'sentry/components/panels/panel'; import PanelBody from 'sentry/components/panels/panelBody'; import PanelHeader from 'sentry/components/panels/panelHeader'; +import SentryDocumentTitle from 'sentry/components/sentryDocumentTitle'; import {API_ACCESS_SCOPES} from 'sentry/constants'; import {t} from 'sentry/locale'; import type {RouteComponentProps} from 'sentry/types/legacyReactRouter'; import type {Organization} from 'sentry/types/organization'; import recreateRoute from 'sentry/utils/recreateRoute'; -import routeTitleGen from 'sentry/utils/routeTitle'; import withOrganization from 'sentry/utils/withOrganization'; -import DeprecatedAsyncView from 'sentry/views/deprecatedAsyncView'; import SettingsPageHeader from 'sentry/views/settings/components/settingsPageHeader'; import type {DeprecatedApiKey} from './types'; @@ -27,12 +27,12 @@ type Props = RouteComponentProps & { organization: Organization; }; -type State = DeprecatedAsyncView['state'] & { +type State = DeprecatedAsyncComponent['state'] & { apiKey: DeprecatedApiKey; }; -class OrganizationApiKeyDetails extends DeprecatedAsyncView { - getEndpoints(): ReturnType { +class OrganizationApiKeyDetails extends DeprecatedAsyncComponent { + getEndpoints(): ReturnType { const {organization} = this.props; return [ [ @@ -42,10 +42,6 @@ class OrganizationApiKeyDetails extends DeprecatedAsyncView { ]; } - getTitle() { - return routeTitleGen(t('Edit API Key'), this.props.organization.slug, false); - } - handleSubmitSuccess = () => { addSuccessMessage('Saved changes'); @@ -67,6 +63,7 @@ class OrganizationApiKeyDetails extends DeprecatedAsyncView { const {organization, router} = this.props; return (
+ diff --git a/static/app/views/settings/organizationAuth/index.tsx b/static/app/views/settings/organizationAuth/index.tsx index 7fbdc0953e045e..50ab70363f80a7 100644 --- a/static/app/views/settings/organizationAuth/index.tsx +++ b/static/app/views/settings/organizationAuth/index.tsx @@ -1,22 +1,22 @@ +import DeprecatedAsyncComponent from 'sentry/components/deprecatedAsyncComponent'; +import SentryDocumentTitle from 'sentry/components/sentryDocumentTitle'; import {t} from 'sentry/locale'; import type {AuthProvider} from 'sentry/types/auth'; import type {Organization} from 'sentry/types/organization'; -import routeTitleGen from 'sentry/utils/routeTitle'; import withOrganization from 'sentry/utils/withOrganization'; -import DeprecatedAsyncView from 'sentry/views/deprecatedAsyncView'; import OrganizationAuthList from './organizationAuthList'; -type Props = DeprecatedAsyncView['props'] & { +type Props = DeprecatedAsyncComponent['props'] & { organization: Organization; }; -type State = DeprecatedAsyncView['state'] & { +type State = DeprecatedAsyncComponent['state'] & { provider: AuthProvider | null; providerList: AuthProvider[] | null; }; -class OrganizationAuth extends DeprecatedAsyncView { +class OrganizationAuth extends DeprecatedAsyncComponent { componentDidUpdate() { const {organization} = this.props; const access = organization.access; @@ -33,7 +33,7 @@ class OrganizationAuth extends DeprecatedAsyncView { } } - getEndpoints(): ReturnType { + getEndpoints(): ReturnType { const {organization} = this.props; return [ ['providerList', `/organizations/${organization.slug}/auth-providers/`], @@ -41,10 +41,6 @@ class OrganizationAuth extends DeprecatedAsyncView { ]; } - getTitle() { - return routeTitleGen(t('Auth Settings'), this.props.organization.slug, false); - } - /** * TODO(epurkhiser): This does not work right now as we still fallback to the * old SSO auth configuration page @@ -89,6 +85,7 @@ class OrganizationAuth extends DeprecatedAsyncView { }; renderBody() { + const {organization} = this.props; const {providerList, provider} = this.state; if (providerList === null) { @@ -104,7 +101,12 @@ class OrganizationAuth extends DeprecatedAsyncView { const activeProvider = providerList?.find(p => p.key === provider?.key); return ( - + + + ); } } diff --git a/static/app/views/settings/organizationDeveloperSettings/index.tsx b/static/app/views/settings/organizationDeveloperSettings/index.tsx index e57151dfc1164c..65faa4e85c2d9b 100644 --- a/static/app/views/settings/organizationDeveloperSettings/index.tsx +++ b/static/app/views/settings/organizationDeveloperSettings/index.tsx @@ -2,12 +2,14 @@ import {Fragment} from 'react'; import styled from '@emotion/styled'; import {removeSentryApp} from 'sentry/actionCreators/sentryApps'; +import DeprecatedAsyncComponent from 'sentry/components/deprecatedAsyncComponent'; import EmptyMessage from 'sentry/components/emptyMessage'; import ExternalLink from 'sentry/components/links/externalLink'; import NavTabs from 'sentry/components/navTabs'; import Panel from 'sentry/components/panels/panel'; import PanelBody from 'sentry/components/panels/panelBody'; import PanelHeader from 'sentry/components/panels/panelHeader'; +import SentryDocumentTitle from 'sentry/components/sentryDocumentTitle'; import {t, tct} from 'sentry/locale'; import {space} from 'sentry/styles/space'; import type {SentryApp} from 'sentry/types/integrations'; @@ -18,25 +20,23 @@ import { PlatformEvents, } from 'sentry/utils/analytics/integrations/platformAnalyticsEvents'; import {trackIntegrationAnalytics} from 'sentry/utils/integrationUtil'; -import routeTitleGen from 'sentry/utils/routeTitle'; import withOrganization from 'sentry/utils/withOrganization'; -import DeprecatedAsyncView from 'sentry/views/deprecatedAsyncView'; import SettingsPageHeader from 'sentry/views/settings/components/settingsPageHeader'; import SentryApplicationRow from 'sentry/views/settings/organizationDeveloperSettings/sentryApplicationRow'; import CreateIntegrationButton from 'sentry/views/settings/organizationIntegrations/createIntegrationButton'; import ExampleIntegrationButton from 'sentry/views/settings/organizationIntegrations/exampleIntegrationButton'; -type Props = Omit & { +type Props = Omit & { organization: Organization; } & RouteComponentProps<{}, {}>; type Tab = 'public' | 'internal'; -type State = DeprecatedAsyncView['state'] & { +type State = DeprecatedAsyncComponent['state'] & { applications: SentryApp[]; tab: Tab; }; -class OrganizationDeveloperSettings extends DeprecatedAsyncView { +class OrganizationDeveloperSettings extends DeprecatedAsyncComponent { analyticsView = 'developer_settings' as const; getDefaultState(): State { @@ -57,12 +57,7 @@ class OrganizationDeveloperSettings extends DeprecatedAsyncView { return this.state.tab; } - getTitle() { - const {organization} = this.props; - return routeTitleGen(t('Custom Integrations'), organization.slug, false); - } - - getEndpoints(): ReturnType { + getEndpoints(): ReturnType { const {organization} = this.props; const returnValue: [string, string, any?, any?][] = [ ['applications', `/organizations/${organization.slug}/sentry-apps/`], @@ -156,6 +151,10 @@ class OrganizationDeveloperSettings extends DeprecatedAsyncView { return (
+ & { organization: Organization; }; -type State = DeprecatedAsyncView['state'] & { +type State = DeprecatedAsyncComponent['state'] & { app: SentryApp; interactions: { componentInteractions: { @@ -41,8 +42,8 @@ type State = DeprecatedAsyncView['state'] & { }; }; -class SentryApplicationDashboard extends DeprecatedAsyncView { - getEndpoints(): ReturnType { +class SentryApplicationDashboard extends DeprecatedAsyncComponent { + getEndpoints(): ReturnType { const {appSlug} = this.props.params; // Default time range for now: 90 days ago to now @@ -65,10 +66,6 @@ class SentryApplicationDashboard extends DeprecatedAsyncView { ]; } - getTitle() { - return t('Integration Dashboard'); - } - renderInstallData() { const {app, stats} = this.state; const {totalUninstalls, totalInstalls} = stats; @@ -206,6 +203,7 @@ class SentryApplicationDashboard extends DeprecatedAsyncView { return (
+ {app.status === 'published' && this.renderInstallData()} {app.status === 'published' && this.renderIntegrationViews()} diff --git a/static/app/views/settings/organizationTeams/teamNotifications.tsx b/static/app/views/settings/organizationTeams/teamNotifications.tsx index f80ad9aa7b303c..8db75569c90475 100644 --- a/static/app/views/settings/organizationTeams/teamNotifications.tsx +++ b/static/app/views/settings/organizationTeams/teamNotifications.tsx @@ -5,13 +5,14 @@ import {addErrorMessage, addSuccessMessage} from 'sentry/actionCreators/indicato import {hasEveryAccess} from 'sentry/components/acl/access'; import {Button} from 'sentry/components/button'; import Confirm from 'sentry/components/confirm'; -import type DeprecatedAsyncComponent from 'sentry/components/deprecatedAsyncComponent'; +import DeprecatedAsyncComponent from 'sentry/components/deprecatedAsyncComponent'; import EmptyMessage from 'sentry/components/emptyMessage'; import TextField from 'sentry/components/forms/fields/textField'; import ExternalLink from 'sentry/components/links/externalLink'; import Panel from 'sentry/components/panels/panel'; import PanelBody from 'sentry/components/panels/panelBody'; import PanelHeader from 'sentry/components/panels/panelHeader'; +import SentryDocumentTitle from 'sentry/components/sentryDocumentTitle'; import {Tooltip} from 'sentry/components/tooltip'; import {IconDelete} from 'sentry/icons'; import {t, tct} from 'sentry/locale'; @@ -21,7 +22,6 @@ import type {RouteComponentProps} from 'sentry/types/legacyReactRouter'; import type {Organization, Team} from 'sentry/types/organization'; import {toTitleCase} from 'sentry/utils/string/toTitleCase'; import withOrganization from 'sentry/utils/withOrganization'; -import DeprecatedAsyncView from 'sentry/views/deprecatedAsyncView'; import PermissionAlert from 'sentry/views/settings/project/permissionAlert'; type Props = RouteComponentProps<{teamId: string}, {}> & { @@ -29,7 +29,7 @@ type Props = RouteComponentProps<{teamId: string}, {}> & { team: Team; }; -type State = DeprecatedAsyncView['state'] & { +type State = DeprecatedAsyncComponent['state'] & { integrations: Integration[]; teamDetails: Team; }; @@ -38,11 +38,7 @@ const DOCS_LINK = 'https://docs.sentry.io/product/integrations/notification-incidents/slack/#team-notifications'; const NOTIFICATION_PROVIDERS = ['slack']; -class TeamNotificationSettings extends DeprecatedAsyncView { - getTitle() { - return 'Team Notification Settings'; - } - +class TeamNotificationSettings extends DeprecatedAsyncComponent { getEndpoints(): ReturnType { const {organization, team} = this.props; return [ @@ -77,6 +73,7 @@ class TeamNotificationSettings extends DeprecatedAsyncView { const {team} = this.props; return ( + diff --git a/static/app/views/settings/project/projectKeys/list/index.tsx b/static/app/views/settings/project/projectKeys/list/index.tsx index a8a6285dd55edd..f37e1fa232397e 100644 --- a/static/app/views/settings/project/projectKeys/list/index.tsx +++ b/static/app/views/settings/project/projectKeys/list/index.tsx @@ -7,18 +7,18 @@ import { } from 'sentry/actionCreators/indicator'; import {hasEveryAccess} from 'sentry/components/acl/access'; import {Button} from 'sentry/components/button'; +import DeprecatedAsyncComponent from 'sentry/components/deprecatedAsyncComponent'; import EmptyMessage from 'sentry/components/emptyMessage'; import ExternalLink from 'sentry/components/links/externalLink'; import Pagination from 'sentry/components/pagination'; import Panel from 'sentry/components/panels/panel'; +import SentryDocumentTitle from 'sentry/components/sentryDocumentTitle'; import {IconAdd, IconFlag} from 'sentry/icons'; import {t, tct} from 'sentry/locale'; import type {RouteComponentProps} from 'sentry/types/legacyReactRouter'; import type {Organization} from 'sentry/types/organization'; import type {Project, ProjectKey} from 'sentry/types/project'; -import routeTitleGen from 'sentry/utils/routeTitle'; import withOrganization from 'sentry/utils/withOrganization'; -import DeprecatedAsyncView from 'sentry/views/deprecatedAsyncView'; import SettingsPageHeader from 'sentry/views/settings/components/settingsPageHeader'; import TextBlock from 'sentry/views/settings/components/text/textBlock'; import PermissionAlert from 'sentry/views/settings/project/permissionAlert'; @@ -32,15 +32,10 @@ type Props = { type State = { keyList: ProjectKey[]; -} & DeprecatedAsyncView['state']; +} & DeprecatedAsyncComponent['state']; -class ProjectKeys extends DeprecatedAsyncView { - getTitle() { - const {projectId} = this.props.params; - return routeTitleGen(t('Client Keys'), projectId, false); - } - - getEndpoints(): ReturnType { +class ProjectKeys extends DeprecatedAsyncComponent { + getEndpoints(): ReturnType { const {organization} = this.props; const {projectId} = this.props.params; return [['keyList', `/projects/${organization.slug}/${projectId}/keys/`]]; @@ -180,6 +175,7 @@ class ProjectKeys extends DeprecatedAsyncView { return (
+ { - getTitle() { - const {projectId} = this.props.params; - return routeTitleGen(t('Releases'), projectId, false); - } - - getEndpoints(): ReturnType { +class ProjectReleaseTracking extends DeprecatedAsyncComponent { + getEndpoints(): ReturnType { const {organization} = this.props; const {projectId} = this.props.params; @@ -125,6 +120,7 @@ class ProjectReleaseTracking extends DeprecatedAsyncView { return (
+ {t( diff --git a/static/app/views/settings/projectGeneralSettings/index.tsx b/static/app/views/settings/projectGeneralSettings/index.tsx index 679225c145a5cc..65c04205dee0f1 100644 --- a/static/app/views/settings/projectGeneralSettings/index.tsx +++ b/static/app/views/settings/projectGeneralSettings/index.tsx @@ -9,6 +9,7 @@ import { import {hasEveryAccess} from 'sentry/components/acl/access'; import {Button} from 'sentry/components/button'; import Confirm from 'sentry/components/confirm'; +import DeprecatedAsyncComponent from 'sentry/components/deprecatedAsyncComponent'; import FieldGroup from 'sentry/components/forms/fieldGroup'; import TextField from 'sentry/components/forms/fields/textField'; import type {FormProps} from 'sentry/components/forms/form'; @@ -22,6 +23,7 @@ import {removePageFiltersStorage} from 'sentry/components/organizations/pageFilt import Panel from 'sentry/components/panels/panel'; import PanelAlert from 'sentry/components/panels/panelAlert'; import PanelHeader from 'sentry/components/panels/panelHeader'; +import SentryDocumentTitle from 'sentry/components/sentryDocumentTitle'; import {fields} from 'sentry/data/forms/projectGeneralSettings'; import {t, tct} from 'sentry/locale'; import ProjectsStore from 'sentry/stores/projectsStore'; @@ -32,32 +34,25 @@ import {browserHistory} from 'sentry/utils/browserHistory'; import {handleXhrErrorResponse} from 'sentry/utils/handleXhrErrorResponse'; import recreateRoute from 'sentry/utils/recreateRoute'; import type RequestError from 'sentry/utils/requestError/requestError'; -import routeTitleGen from 'sentry/utils/routeTitle'; import withOrganization from 'sentry/utils/withOrganization'; -import DeprecatedAsyncView from 'sentry/views/deprecatedAsyncView'; import SettingsPageHeader from 'sentry/views/settings/components/settingsPageHeader'; import TextBlock from 'sentry/views/settings/components/text/textBlock'; import PermissionAlert from 'sentry/views/settings/project/permissionAlert'; -type Props = DeprecatedAsyncView['props'] & +type Props = DeprecatedAsyncComponent['props'] & RouteComponentProps<{projectId: string}, {}> & { onChangeSlug: (slug: string) => void; organization: Organization; }; -type State = DeprecatedAsyncView['state'] & { +type State = DeprecatedAsyncComponent['state'] & { data: Project; }; -class ProjectGeneralSettings extends DeprecatedAsyncView { +class ProjectGeneralSettings extends DeprecatedAsyncComponent { private _form: Record = {}; - getTitle() { - const {projectId} = this.props.params; - return routeTitleGen(t('Project Settings'), projectId, false); - } - - getEndpoints(): ReturnType { + getEndpoints(): ReturnType { const {organization} = this.props; const {projectId} = this.props.params; @@ -317,6 +312,7 @@ class ProjectGeneralSettings extends DeprecatedAsyncView { return (
+
diff --git a/static/app/views/settings/projectPerformance/projectPerformance.tsx b/static/app/views/settings/projectPerformance/projectPerformance.tsx index dc021a1d6202f7..608fd213e05868 100644 --- a/static/app/views/settings/projectPerformance/projectPerformance.tsx +++ b/static/app/views/settings/projectPerformance/projectPerformance.tsx @@ -6,6 +6,7 @@ import Access from 'sentry/components/acl/access'; import Feature from 'sentry/components/acl/feature'; import {Button, LinkButton} from 'sentry/components/button'; import Confirm from 'sentry/components/confirm'; +import DeprecatedAsyncComponent from 'sentry/components/deprecatedAsyncComponent'; import FieldWrapper from 'sentry/components/forms/fieldGroup/fieldWrapper'; import Form from 'sentry/components/forms/form'; import JsonForm from 'sentry/components/forms/jsonForm'; @@ -16,6 +17,7 @@ import Panel from 'sentry/components/panels/panel'; import PanelFooter from 'sentry/components/panels/panelFooter'; import PanelHeader from 'sentry/components/panels/panelHeader'; import PanelItem from 'sentry/components/panels/panelItem'; +import SentryDocumentTitle from 'sentry/components/sentryDocumentTitle'; import {t, tct} from 'sentry/locale'; import ConfigStore from 'sentry/stores/configStore'; import ProjectsStore from 'sentry/stores/projectsStore'; @@ -30,8 +32,6 @@ import {trackAnalytics} from 'sentry/utils/analytics'; import {safeGetQsParam} from 'sentry/utils/integrationUtil'; import {isActiveSuperuser} from 'sentry/utils/isActiveSuperuser'; import {formatPercentage} from 'sentry/utils/number/formatPercentage'; -import routeTitleGen from 'sentry/utils/routeTitle'; -import DeprecatedAsyncView from 'sentry/views/deprecatedAsyncView'; import SettingsPageHeader from 'sentry/views/settings/components/settingsPageHeader'; import PermissionAlert from 'sentry/views/settings/project/permissionAlert'; @@ -111,17 +111,11 @@ type ProjectThreshold = { id?: string; }; -type State = DeprecatedAsyncView['state'] & { +type State = DeprecatedAsyncComponent['state'] & { threshold: ProjectThreshold; }; -class ProjectPerformance extends DeprecatedAsyncView { - getTitle() { - const {projectId} = this.props.params; - - return routeTitleGen(t('Performance'), projectId, false); - } - +class ProjectPerformance extends DeprecatedAsyncComponent { getProjectEndpoint({orgId, projectId}: RouteParams) { return `/projects/${orgId}/${projectId}/`; } @@ -130,11 +124,11 @@ class ProjectPerformance extends DeprecatedAsyncView { return `/projects/${orgId}/${projectId}/performance-issues/configure/`; } - getEndpoints(): ReturnType { + getEndpoints(): ReturnType { const {params, organization} = this.props; const {projectId} = params; - const endpoints: ReturnType = [ + const endpoints: ReturnType = [ [ 'threshold', `/projects/${organization.slug}/${projectId}/transaction-threshold/configure/`, @@ -143,14 +137,14 @@ class ProjectPerformance extends DeprecatedAsyncView { ]; const performanceIssuesEndpoint: ReturnType< - DeprecatedAsyncView['getEndpoints'] + DeprecatedAsyncComponent['getEndpoints'] >[number] = [ 'performance_issue_settings', `/projects/${organization.slug}/${projectId}/performance-issues/configure/`, ]; const generalSettingsEndpoint: ReturnType< - DeprecatedAsyncView['getEndpoints'] + DeprecatedAsyncComponent['getEndpoints'] >[number] = [ 'general', `/projects/${organization.slug}/${projectId}/performance/configure/`, @@ -878,6 +872,7 @@ class ProjectPerformance extends DeprecatedAsyncView { return ( + diff --git a/static/app/views/settings/projectPlugins/details.tsx b/static/app/views/settings/projectPlugins/details.tsx index 7e7d2f5f668cbd..0da3c8de1f1a97 100644 --- a/static/app/views/settings/projectPlugins/details.tsx +++ b/static/app/views/settings/projectPlugins/details.tsx @@ -7,8 +7,10 @@ import { } from 'sentry/actionCreators/indicator'; import {disablePlugin, enablePlugin} from 'sentry/actionCreators/plugins'; import {Button} from 'sentry/components/button'; +import DeprecatedAsyncComponent from 'sentry/components/deprecatedAsyncComponent'; import ExternalLink from 'sentry/components/links/externalLink'; import PluginConfig from 'sentry/components/pluginConfig'; +import SentryDocumentTitle from 'sentry/components/sentryDocumentTitle'; import {t} from 'sentry/locale'; import {space} from 'sentry/styles/space'; import type {Plugin} from 'sentry/types/integrations'; @@ -18,7 +20,6 @@ import type {Project} from 'sentry/types/project'; import getDynamicText from 'sentry/utils/getDynamicText'; import {trackIntegrationAnalytics} from 'sentry/utils/integrationUtil'; import withPlugins from 'sentry/utils/withPlugins'; -import DeprecatedAsyncView from 'sentry/views/deprecatedAsyncView'; import SettingsPageHeader from 'sentry/views/settings/components/settingsPageHeader'; type Props = { @@ -31,7 +32,7 @@ type Props = { type State = { pluginDetails?: Plugin; -} & DeprecatedAsyncView['state']; +} & DeprecatedAsyncComponent['state']; /** * There are currently two sources of truths for plugin details: @@ -42,7 +43,7 @@ type State = { * The more correct way would be to pass `config` to PluginConfig and use plugin from * PluginsStore */ -class ProjectPluginDetails extends DeprecatedAsyncView { +class ProjectPluginDetails extends DeprecatedAsyncComponent { componentDidUpdate(prevProps: Props, prevState: State) { super.componentDidUpdate(prevProps, prevState); if (prevProps.params.pluginId !== this.props.params.pluginId) { @@ -65,15 +66,7 @@ class ProjectPluginDetails extends DeprecatedAsyncView { }); } - getTitle() { - const {plugin} = this.state; - if (plugin?.name) { - return plugin.name; - } - return 'Sentry'; - } - - getEndpoints(): ReturnType { + getEndpoints(): ReturnType { const {organization} = this.props; const {projectId, pluginId} = this.props.params; return [ @@ -194,6 +187,7 @@ class ProjectPluginDetails extends DeprecatedAsyncView { return (
+
From 281e87122a8fdc11968748e8986aa71ac14f91c8 Mon Sep 17 00:00:00 2001 From: Evan Purkhiser Date: Sat, 4 Jan 2025 01:43:21 -0500 Subject: [PATCH 2/2] Update static/app/views/releases/list/index.tsx Co-authored-by: Michelle Zhang <56095982+michellewzhang@users.noreply.github.com> --- static/app/views/releases/list/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/static/app/views/releases/list/index.tsx b/static/app/views/releases/list/index.tsx index 87532b3b1971c9..c34cd2f9ecdcba 100644 --- a/static/app/views/releases/list/index.tsx +++ b/static/app/views/releases/list/index.tsx @@ -547,7 +547,7 @@ class ReleasesList extends DeprecatedAsyncComponent { return ( - +