Skip to content

Commit f5f83ce

Browse files
authored
feat(insights): init domain view (#77632)
1 parent 3e35394 commit f5f83ce

File tree

11 files changed

+328
-63
lines changed

11 files changed

+328
-63
lines changed

static/app/components/sidebar/index.tsx

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,22 @@ import useOrganization from 'sentry/utils/useOrganization';
5353
import useProjects from 'sentry/utils/useProjects';
5454
import {useModuleURLBuilder} from 'sentry/views/insights/common/utils/useModuleURL';
5555
import {MODULE_SIDEBAR_TITLE as HTTP_MODULE_SIDEBAR_TITLE} from 'sentry/views/insights/http/settings';
56+
import {
57+
AI_LANDING_SUB_PATH,
58+
AI_LANDING_TITLE,
59+
} from 'sentry/views/insights/pages/aiLandingPage';
60+
import {
61+
BACKEND_LANDING_SUB_PATH,
62+
BACKEND_LANDING_TITLE,
63+
} from 'sentry/views/insights/pages/backendLandingPage';
64+
import {
65+
FRONTEND_LANDING_SUB_PATH,
66+
FRONTEND_LANDING_TITLE,
67+
} from 'sentry/views/insights/pages/frontendLandingPage';
68+
import {
69+
MOBILE_LANDING_SUB_PATH,
70+
MOBILE_LANDING_TITLE,
71+
} from 'sentry/views/insights/pages/mobileLandingPage';
5672
import {MODULE_TITLES} from 'sentry/views/insights/settings';
5773
import MetricsOnboardingSidebar from 'sentry/views/metrics/ddmOnboarding/sidebar';
5874

@@ -588,6 +604,48 @@ function Sidebar() {
588604
/>
589605
);
590606

607+
const performanceDomains = hasOrganization && (
608+
<Feature features="insights-domain-view" organization={organization}>
609+
<SidebarAccordion
610+
{...sidebarItemProps}
611+
icon={<IconGraph />}
612+
label={t('Performance')}
613+
id="performance-domains"
614+
initiallyExpanded={false}
615+
exact={!shouldAccordionFloat}
616+
>
617+
<SidebarItem
618+
{...sidebarItemProps}
619+
label={FRONTEND_LANDING_TITLE}
620+
to={`/organizations/${organization.slug}/performance/${FRONTEND_LANDING_SUB_PATH}/`}
621+
id="performance-domains-web"
622+
icon={<SubitemDot collapsed />}
623+
/>
624+
<SidebarItem
625+
{...sidebarItemProps}
626+
label={BACKEND_LANDING_TITLE}
627+
to={`/organizations/${organization.slug}/performance/${BACKEND_LANDING_SUB_PATH}/`}
628+
id="performance-domains-platform"
629+
icon={<SubitemDot collapsed />}
630+
/>
631+
<SidebarItem
632+
{...sidebarItemProps}
633+
label={MOBILE_LANDING_TITLE}
634+
to={`/organizations/${organization.slug}/performance/${MOBILE_LANDING_SUB_PATH}/`}
635+
id="performance-domains-mobile"
636+
icon={<SubitemDot collapsed />}
637+
/>
638+
<SidebarItem
639+
{...sidebarItemProps}
640+
label={AI_LANDING_TITLE}
641+
to={`/organizations/${organization.slug}/performance/${AI_LANDING_SUB_PATH}/`}
642+
id="performance-domains-ai"
643+
icon={<SubitemDot collapsed />}
644+
/>
645+
</SidebarAccordion>
646+
</Feature>
647+
);
648+
591649
const insights = hasOrganization && (
592650
<Feature key="insights" features="insights-entry-points" organization={organization}>
593651
<SidebarAccordion
@@ -666,6 +724,7 @@ function Sidebar() {
666724
<SidebarSection hasNewNav={hasNewNav}>
667725
{explore}
668726
{insights}
727+
{performanceDomains}
669728
</SidebarSection>
670729

671730
<SidebarSection hasNewNav={hasNewNav}>

static/app/routes.tsx

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@ import withDomainRequired from 'sentry/utils/withDomainRequired';
1414
import App from 'sentry/views/app';
1515
import AuthLayout from 'sentry/views/auth/layout';
1616
import {MODULE_BASE_URLS} from 'sentry/views/insights/common/utils/useModuleURL';
17+
import {AI_LANDING_SUB_PATH} from 'sentry/views/insights/pages/aiLandingPage';
18+
import {BACKEND_LANDING_SUB_PATH} from 'sentry/views/insights/pages/backendLandingPage';
19+
import {FRONTEND_LANDING_SUB_PATH} from 'sentry/views/insights/pages/frontendLandingPage';
20+
import {MOBILE_LANDING_SUB_PATH} from 'sentry/views/insights/pages/mobileLandingPage';
1721
import {INSIGHTS_BASE_URL} from 'sentry/views/insights/settings';
1822
import {ModuleName} from 'sentry/views/insights/types';
1923
import {Tab, TabPaths} from 'sentry/views/issueDetails/types';
@@ -1631,6 +1635,22 @@ function buildRoutes() {
16311635
path="trends/"
16321636
component={make(() => import('sentry/views/performance/trends'))}
16331637
/>
1638+
<Route
1639+
path={`${FRONTEND_LANDING_SUB_PATH}/`}
1640+
component={make(() => import('sentry/views/insights/pages/frontendLandingPage'))}
1641+
/>
1642+
<Route
1643+
path={`${BACKEND_LANDING_SUB_PATH}/`}
1644+
component={make(() => import('sentry/views/insights/pages/backendLandingPage'))}
1645+
/>
1646+
<Route
1647+
path={`${MOBILE_LANDING_SUB_PATH}/`}
1648+
component={make(() => import('sentry/views/insights/pages/mobileLandingPage'))}
1649+
/>
1650+
<Route
1651+
path={`${AI_LANDING_SUB_PATH}/`}
1652+
component={make(() => import('sentry/views/insights/pages/aiLandingPage'))}
1653+
/>
16341654
<Route path="summary/">
16351655
<IndexRoute
16361656
component={make(

static/app/views/insights/browser/resources/views/resourcesLandingPage.tsx

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -28,35 +28,37 @@ import {ToolRibbon} from 'sentry/views/insights/common/components/ribbon';
2828
import {useModuleBreadcrumbs} from 'sentry/views/insights/common/utils/useModuleBreadcrumbs';
2929
import {DomainSelector} from 'sentry/views/insights/common/views/spans/selectors/domainSelector';
3030
import SubregionSelector from 'sentry/views/insights/common/views/spans/selectors/subregionSelector';
31-
import {ModuleName} from 'sentry/views/insights/types';
31+
import {type InsightLandingProps, ModuleName} from 'sentry/views/insights/types';
3232

3333
const {SPAN_OP, SPAN_DOMAIN} = BrowserStarfishFields;
3434

35-
function ResourcesLandingPage() {
35+
function ResourcesLandingPage({disableHeader}: InsightLandingProps) {
3636
const filters = useResourceModuleFilters();
3737
const crumbs = useModuleBreadcrumbs('resource');
3838

3939
return (
4040
<React.Fragment>
4141
<PageAlertProvider>
42-
<Layout.Header>
43-
<Layout.HeaderContent>
44-
<Breadcrumbs crumbs={crumbs} />
42+
{!disableHeader && (
43+
<Layout.Header>
44+
<Layout.HeaderContent>
45+
<Breadcrumbs crumbs={crumbs} />
4546

46-
<Layout.Title>
47-
{MODULE_TITLE}
48-
<PageHeadingQuestionTooltip
49-
docsUrl={MODULE_DOC_LINK}
50-
title={MODULE_DESCRIPTION}
51-
/>
52-
</Layout.Title>
53-
</Layout.HeaderContent>
54-
<Layout.HeaderActions>
55-
<ButtonBar gap={1}>
56-
<FeedbackWidgetButton />
57-
</ButtonBar>
58-
</Layout.HeaderActions>
59-
</Layout.Header>
47+
<Layout.Title>
48+
{MODULE_TITLE}
49+
<PageHeadingQuestionTooltip
50+
docsUrl={MODULE_DOC_LINK}
51+
title={MODULE_DESCRIPTION}
52+
/>
53+
</Layout.Title>
54+
</Layout.HeaderContent>
55+
<Layout.HeaderActions>
56+
<ButtonBar gap={1}>
57+
<FeedbackWidgetButton />
58+
</ButtonBar>
59+
</Layout.HeaderActions>
60+
</Layout.Header>
61+
)}
6062
<Layout.Body>
6163
<Layout.Main fullWidth>
6264
<PageAlert />
@@ -91,14 +93,14 @@ function ResourcesLandingPage() {
9193
);
9294
}
9395

94-
function PageWithProviders() {
96+
function PageWithProviders(props: InsightLandingProps) {
9597
return (
9698
<ModulePageProviders
9799
moduleName="resource"
98100
features="insights-initial-modules"
99101
analyticEventName="insight.page_loads.assets"
100102
>
101-
<ResourcesLandingPage />
103+
<ResourcesLandingPage {...props} />
102104
</ModulePageProviders>
103105
);
104106
}

static/app/views/insights/browser/webVitals/views/webVitalsLandingPage.tsx

Lines changed: 24 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,13 @@ import {ModulesOnboarding} from 'sentry/views/insights/common/components/modules
3737
import {useModuleBreadcrumbs} from 'sentry/views/insights/common/utils/useModuleBreadcrumbs';
3838
import SubregionSelector from 'sentry/views/insights/common/views/spans/selectors/subregionSelector';
3939
import {
40+
type InsightLandingProps,
4041
ModuleName,
4142
SpanMetricsField,
4243
type SubregionCode,
4344
} from 'sentry/views/insights/types';
4445

45-
export function WebVitalsLandingPage() {
46+
export function WebVitalsLandingPage({disableHeader}: InsightLandingProps) {
4647
const location = useLocation();
4748

4849
const router = useRouter();
@@ -72,24 +73,26 @@ export function WebVitalsLandingPage() {
7273

7374
return (
7475
<React.Fragment>
75-
<Layout.Header>
76-
<Layout.HeaderContent>
77-
<Breadcrumbs crumbs={crumbs} />
78-
79-
<Layout.Title>
80-
{MODULE_TITLE}
81-
<PageHeadingQuestionTooltip
82-
docsUrl={MODULE_DOC_LINK}
83-
title={MODULE_DESCRIPTION}
84-
/>
85-
</Layout.Title>
86-
</Layout.HeaderContent>
87-
<Layout.HeaderActions>
88-
<ButtonBar gap={1}>
89-
<FeedbackWidgetButton />
90-
</ButtonBar>
91-
</Layout.HeaderActions>
92-
</Layout.Header>
76+
{!disableHeader && (
77+
<Layout.Header>
78+
<Layout.HeaderContent>
79+
<Breadcrumbs crumbs={crumbs} />
80+
81+
<Layout.Title>
82+
{MODULE_TITLE}
83+
<PageHeadingQuestionTooltip
84+
docsUrl={MODULE_DOC_LINK}
85+
title={MODULE_DESCRIPTION}
86+
/>
87+
</Layout.Title>
88+
</Layout.HeaderContent>
89+
<Layout.HeaderActions>
90+
<ButtonBar gap={1}>
91+
<FeedbackWidgetButton />
92+
</ButtonBar>
93+
</Layout.HeaderActions>
94+
</Layout.Header>
95+
)}
9396

9497
<Layout.Body>
9598
<Layout.Main fullWidth>
@@ -168,14 +171,14 @@ export function WebVitalsLandingPage() {
168171
);
169172
}
170173

171-
function PageWithProviders() {
174+
function PageWithProviders(props: InsightLandingProps) {
172175
return (
173176
<ModulePageProviders
174177
moduleName="vital"
175178
features="insights-initial-modules"
176179
analyticEventName="insight.page_loads.vital"
177180
>
178-
<WebVitalsLandingPage />
181+
<WebVitalsLandingPage {...props} />
179182
</ModulePageProviders>
180183
);
181184
}

static/app/views/insights/http/views/httpLandingPage.tsx

Lines changed: 27 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,13 @@ import {
3939
MODULE_DOC_LINK,
4040
MODULE_TITLE,
4141
} from 'sentry/views/insights/http/settings';
42-
import {ModuleName, SpanMetricsField} from 'sentry/views/insights/types';
42+
import {
43+
type InsightLandingProps,
44+
ModuleName,
45+
SpanMetricsField,
46+
} from 'sentry/views/insights/types';
4347

44-
export function HTTPLandingPage() {
48+
export function HTTPLandingPage({disableHeader}: InsightLandingProps) {
4549
const organization = useOrganization();
4650
const location = useLocation();
4751

@@ -157,24 +161,26 @@ export function HTTPLandingPage() {
157161

158162
return (
159163
<React.Fragment>
160-
<Layout.Header>
161-
<Layout.HeaderContent>
162-
<Breadcrumbs crumbs={crumbs} />
164+
{!disableHeader && (
165+
<Layout.Header>
166+
<Layout.HeaderContent>
167+
<Breadcrumbs crumbs={crumbs} />
163168

164-
<Layout.Title>
165-
{MODULE_TITLE}
166-
<PageHeadingQuestionTooltip
167-
docsUrl={MODULE_DOC_LINK}
168-
title={MODULE_DESCRIPTION}
169-
/>
170-
</Layout.Title>
171-
</Layout.HeaderContent>
172-
<Layout.HeaderActions>
173-
<ButtonBar gap={1}>
174-
<FeedbackWidgetButton />
175-
</ButtonBar>
176-
</Layout.HeaderActions>
177-
</Layout.Header>
169+
<Layout.Title>
170+
{MODULE_TITLE}
171+
<PageHeadingQuestionTooltip
172+
docsUrl={MODULE_DOC_LINK}
173+
title={MODULE_DESCRIPTION}
174+
/>
175+
</Layout.Title>
176+
</Layout.HeaderContent>
177+
<Layout.HeaderActions>
178+
<ButtonBar gap={1}>
179+
<FeedbackWidgetButton />
180+
</ButtonBar>
181+
</Layout.HeaderActions>
182+
</Layout.Header>
183+
)}
178184

179185
<Layout.Body>
180186
<Layout.Main fullWidth>
@@ -255,14 +261,14 @@ const DEFAULT_SORT = {
255261

256262
const DOMAIN_TABLE_ROW_COUNT = 10;
257263

258-
function PageWithProviders() {
264+
function PageWithProviders(props: InsightLandingProps) {
259265
return (
260266
<ModulePageProviders
261267
moduleName="http"
262268
features="insights-initial-modules"
263269
analyticEventName="insight.page_loads.http"
264270
>
265-
<HTTPLandingPage />
271+
<HTTPLandingPage {...props} />
266272
</ModulePageProviders>
267273
);
268274
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import {t} from 'sentry/locale';
2+
3+
function AiLandingPage() {
4+
return <div>WELCOME!</div>;
5+
}
6+
7+
export default AiLandingPage;
8+
9+
export const AI_LANDING_SUB_PATH = 'ai';
10+
export const AI_LANDING_TITLE = t('AI');
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import {t} from 'sentry/locale';
2+
3+
function PlatformLandingPage() {
4+
return <div>WELCOME!</div>;
5+
}
6+
7+
export default PlatformLandingPage;
8+
9+
export const BACKEND_LANDING_SUB_PATH = 'backend';
10+
export const BACKEND_LANDING_TITLE = t('Backend');

0 commit comments

Comments
 (0)