diff --git a/static/app/routes.tsx b/static/app/routes.tsx index a2dc07c062ed33..ad57bb3340f9c4 100644 --- a/static/app/routes.tsx +++ b/static/app/routes.tsx @@ -29,6 +29,7 @@ import {ModuleName} from 'sentry/views/insights/types'; import {GroupEventDetailsLoading} from 'sentry/views/issueDetails/groupEventDetails/groupEventDetailsLoading'; import {Tab, TabPaths} from 'sentry/views/issueDetails/types'; import {OverviewWrapper} from 'sentry/views/issueList/overviewWrapper'; +import {IssueTaxonomy} from 'sentry/views/issueList/taxonomies'; import OrganizationContainer from 'sentry/views/organizationContainer'; import OrganizationLayout from 'sentry/views/organizationLayout'; import {OrganizationStatsWrapper} from 'sentry/views/organizationStats/organizationStatsWrapper'; @@ -2212,16 +2213,16 @@ function buildRoutes() { import('sentry/views/issueList/pages/errorsOutages'))} /> import('sentry/views/issueList/pages/metrics'))} + path={`${IssueTaxonomy.REGRESSIONS}/`} + component={make(() => import('sentry/views/issueList/pages/regressions'))} /> import('sentry/views/issueList/pages/bestPractices'))} + path={`${IssueTaxonomy.WARNINGS}/`} + component={make(() => import('sentry/views/issueList/pages/warnings'))} /> + - + diff --git a/static/app/views/issueList/pages/metrics.tsx b/static/app/views/issueList/pages/regressions.tsx similarity index 73% rename from static/app/views/issueList/pages/metrics.tsx rename to static/app/views/issueList/pages/regressions.tsx index f3e1916b8efb5b..b1f58a8042326c 100644 --- a/static/app/views/issueList/pages/metrics.tsx +++ b/static/app/views/issueList/pages/regressions.tsx @@ -1,18 +1,18 @@ import NoProjectMessage from 'sentry/components/noProjectMessage'; import PageFiltersContainer from 'sentry/components/organizations/pageFilters/container'; import Redirect from 'sentry/components/redirect'; -import {t} from 'sentry/locale'; import type {RouteComponentProps} from 'sentry/types/legacyReactRouter'; import useOrganization from 'sentry/utils/useOrganization'; import IssueListContainer from 'sentry/views/issueList'; import IssueListOverview from 'sentry/views/issueList/overview'; +import {ISSUE_TAXONOMY_CONFIG, IssueTaxonomy} from 'sentry/views/issueList/taxonomies'; type Props = RouteComponentProps; -const TITLE = t('Metrics'); -const QUERY = 'is:unresolved issue.category:performance_regression'; +const CONFIG = ISSUE_TAXONOMY_CONFIG[IssueTaxonomy.REGRESSIONS]; +const QUERY = `is:unresolved issue.category:[${CONFIG.categories.join(',')}]`; -export default function ErrorsOutagesPage(props: Props) { +export default function RegressionsPage(props: Props) { const organization = useOrganization(); const hasIssueTaxonomy = organization.features.includes('issue-taxonomy'); if (!hasIssueTaxonomy) { @@ -20,10 +20,10 @@ export default function ErrorsOutagesPage(props: Props) { } return ( - + - + diff --git a/static/app/views/issueList/pages/bestPractices.tsx b/static/app/views/issueList/pages/warnings.tsx similarity index 73% rename from static/app/views/issueList/pages/bestPractices.tsx rename to static/app/views/issueList/pages/warnings.tsx index 59a13d60c634de..83c8349bb8d33d 100644 --- a/static/app/views/issueList/pages/bestPractices.tsx +++ b/static/app/views/issueList/pages/warnings.tsx @@ -1,19 +1,18 @@ import NoProjectMessage from 'sentry/components/noProjectMessage'; import PageFiltersContainer from 'sentry/components/organizations/pageFilters/container'; import Redirect from 'sentry/components/redirect'; -import {t} from 'sentry/locale'; import type {RouteComponentProps} from 'sentry/types/legacyReactRouter'; import useOrganization from 'sentry/utils/useOrganization'; import IssueListContainer from 'sentry/views/issueList'; import IssueListOverview from 'sentry/views/issueList/overview'; +import {ISSUE_TAXONOMY_CONFIG, IssueTaxonomy} from 'sentry/views/issueList/taxonomies'; type Props = RouteComponentProps; -const TITLE = t('Best Practices'); -const QUERY = - 'is:unresolved issue.category:[user_experience,responsiveness,performance_best_practice]'; +const CONFIG = ISSUE_TAXONOMY_CONFIG[IssueTaxonomy.WARNINGS]; +const QUERY = `is:unresolved issue.category:[${CONFIG.categories.join(',')}]`; -export default function ErrorsOutagesPage(props: Props) { +export default function WarningsPage(props: Props) { const organization = useOrganization(); const hasIssueTaxonomy = organization.features.includes('issue-taxonomy'); if (!hasIssueTaxonomy) { @@ -21,10 +20,10 @@ export default function ErrorsOutagesPage(props: Props) { } return ( - + - + diff --git a/static/app/views/issueList/taxonomies.tsx b/static/app/views/issueList/taxonomies.tsx new file mode 100644 index 00000000000000..b45abfb020fb3d --- /dev/null +++ b/static/app/views/issueList/taxonomies.tsx @@ -0,0 +1,37 @@ +import {t} from 'sentry/locale'; +import {IssueCategory} from 'sentry/types/group'; + +export enum IssueTaxonomy { + ERRORS_AND_OUTAGES = 'errors-outages', + REGRESSIONS = 'regressions', + WARNINGS = 'warnings', +} + +export const ISSUE_TAXONOMY_CONFIG: Record< + IssueTaxonomy, + { + categories: IssueCategory[]; + key: string; + label: string; + } +> = { + [IssueTaxonomy.ERRORS_AND_OUTAGES]: { + categories: [IssueCategory.ERROR, IssueCategory.OUTAGE], + label: t('Errors & Outages'), + key: 'errors-outages', + }, + [IssueTaxonomy.REGRESSIONS]: { + categories: [IssueCategory.PERFORMANCE_REGRESSION], + label: t('Regressions'), + key: 'regressions', + }, + [IssueTaxonomy.WARNINGS]: { + categories: [ + IssueCategory.RESPONSIVENESS, + IssueCategory.USER_EXPERIENCE, + IssueCategory.PERFORMANCE_BEST_PRACTICE, + ], + label: t('Warnings'), + key: 'warnings', + }, +}; diff --git a/static/app/views/nav/secondary/sections/issues/issuesSecondaryNav.tsx b/static/app/views/nav/secondary/sections/issues/issuesSecondaryNav.tsx index 4c62454cee1a77..8edd5348cfa814 100644 --- a/static/app/views/nav/secondary/sections/issues/issuesSecondaryNav.tsx +++ b/static/app/views/nav/secondary/sections/issues/issuesSecondaryNav.tsx @@ -4,6 +4,7 @@ import {FeatureBadge} from 'sentry/components/core/badge/featureBadge'; import {useWorkflowEngineFeatureGate} from 'sentry/components/workflowEngine/useWorkflowEngineFeatureGate'; import {t} from 'sentry/locale'; import useOrganization from 'sentry/utils/useOrganization'; +import {ISSUE_TAXONOMY_CONFIG} from 'sentry/views/issueList/taxonomies'; import {PRIMARY_NAV_GROUP_CONFIG} from 'sentry/views/nav/primary/config'; import {SecondaryNav} from 'sentry/views/nav/secondary/secondary'; import {IssueViewNavItems} from 'sentry/views/nav/secondary/sections/issues/issueViews/issueViewNavItems'; @@ -31,7 +32,7 @@ export function IssuesSecondaryNav() { to={`${baseUrl}/feedback/`} analyticsItemName="issues_feedback" > - {t('Feedback')} + {t('User Feedback')} )} @@ -43,32 +44,21 @@ export function IssuesSecondaryNav() { - - {t('Errors & Outages')} - - - {t('Metrics')} - - - {t('Best Practices')} - + {Object.values(ISSUE_TAXONOMY_CONFIG).map(({key, label}) => ( + + {label} + + ))} - {t('Feedback')} + {t('User Feedback')}