From c3c7968fa6fb7e33f49790247c66272579afc705 Mon Sep 17 00:00:00 2001
From: Dominik Buszowiecki <44422760+DominikB2014@users.noreply.github.com>
Date: Fri, 18 Oct 2024 16:55:48 -0400
Subject: [PATCH] feat(insights): create screen rendering module (#79192)
This PR adds a screen rendering module under the domain view.
This is a temporary change, the mobile screen module will require more
work, but we can extract the screen rendering section of it as its own
module in the meantime.
---------
Co-authored-by: Matt Quinn
---
static/app/routes.tsx | 20 +++++
.../utils/analytics/insightAnalyticEvents.tsx | 2 +
.../common/components/modulesOnboarding.tsx | 21 +++++
.../common/queries/useHasFirstSpan.tsx | 1 +
.../insights/common/utils/moduleTitles.tsx | 2 +
.../insights/common/utils/useModuleURL.tsx | 2 +
.../views/spans/selectors/actionSelector.tsx | 1 +
.../views/spans/selectors/domainSelector.tsx | 1 +
.../common/views/spans/spanTimeCharts.tsx | 1 +
.../screenRenderingContent.tsx | 5 ++
.../screenRenderingLandingPage.tsx | 76 +++++++++++++++++++
.../screenRenderingSummaryPage.tsx | 53 +++++++++++++
.../mobile/screenRendering/settings.ts | 17 +++++
.../components/screensOverviewTable.tsx | 27 +++++--
.../components/tables/spanOperationTable.tsx | 12 ++-
.../pages/mobile/mobilePageHeader.tsx | 7 +-
static/app/views/insights/settings.ts | 15 +++-
static/app/views/insights/types.tsx | 1 +
18 files changed, 254 insertions(+), 10 deletions(-)
create mode 100644 static/app/views/insights/mobile/screenRendering/screenRenderingContent.tsx
create mode 100644 static/app/views/insights/mobile/screenRendering/screenRenderingLandingPage.tsx
create mode 100644 static/app/views/insights/mobile/screenRendering/screenRenderingSummaryPage.tsx
create mode 100644 static/app/views/insights/mobile/screenRendering/settings.ts
diff --git a/static/app/routes.tsx b/static/app/routes.tsx
index 8701c79c8778bf..28260ba37bdf34 100644
--- a/static/app/routes.tsx
+++ b/static/app/routes.tsx
@@ -13,6 +13,7 @@ import withDomainRequired from 'sentry/utils/withDomainRequired';
import App from 'sentry/views/app';
import AuthLayout from 'sentry/views/auth/layout';
import {MODULE_BASE_URLS} from 'sentry/views/insights/common/utils/useModuleURL';
+import {SUMMARY_PAGE_BASE_URL} from 'sentry/views/insights/mobile/screenRendering/settings';
import {AI_LANDING_SUB_PATH} from 'sentry/views/insights/pages/ai/settings';
import {BACKEND_LANDING_SUB_PATH} from 'sentry/views/insights/pages/backend/settings';
import {FRONTEND_LANDING_SUB_PATH} from 'sentry/views/insights/pages/frontend/settings';
@@ -1748,6 +1749,25 @@ function buildRoutes() {
)}
/>
+
+
+ import(
+ 'sentry/views/insights/mobile/screenRendering/screenRenderingLandingPage'
+ )
+ )}
+ />
+
+ import(
+ 'sentry/views/insights/mobile/screenRendering/screenRenderingSummaryPage'
+ )
+ )}
+ />
+
= {
'insight.page_loads.queue': 'Insights: Queue Page Load',
'insight.page_loads.screen_load': 'Insights: Screen Load Page Load',
'insight.page_loads.vital': 'Insights: Vital Page Load',
+ 'insight.page_loads.screen_rendering': 'Insights: Screen Rendering Page Load',
'insight.app_start.select_start_type': 'Insights: App Start - select app start type',
'insight.app_start.spans.filter_by_device_class':
'Insights: App Start - filter device class',
diff --git a/static/app/views/insights/common/components/modulesOnboarding.tsx b/static/app/views/insights/common/components/modulesOnboarding.tsx
index 97678326a0fa6c..193226837e83e1 100644
--- a/static/app/views/insights/common/components/modulesOnboarding.tsx
+++ b/static/app/views/insights/common/components/modulesOnboarding.tsx
@@ -30,6 +30,7 @@ import {
MODULE_DATA_TYPES,
MODULE_DATA_TYPES_PLURAL,
MODULE_PRODUCT_DOC_LINKS,
+ MODULE_TITLES,
} from 'sentry/views/insights/settings';
import {ModuleName} from 'sentry/views/insights/types';
import PerformanceOnboarding from 'sentry/views/performance/onboarding';
@@ -458,4 +459,24 @@ const EMPTY_STATE_CONTENT: Record = {
imageSrc: screenLoadsPreviewImg,
supportedSdks: ['android', 'flutter', 'apple-ios', 'react-native'],
},
+ 'screen-rendering': {
+ description: t(
+ 'Screen Rendering shows you views within your application that are presenting slow or frozen interactions and how frequently these hiccups are occurring.'
+ ),
+ heading: t('An app that loads quickly can still be terrible'),
+ imageSrc: screenLoadsPreviewImg, // TODO - replace with actual image
+ valuePropDescription: tct('With [moduleTitle]:', {
+ moduleTitle: MODULE_TITLES[ModuleName.SCREEN_RENDERING],
+ }),
+ valuePropPoints: [
+ tct('Compare [dataType] performance between releases.', {
+ dataType: MODULE_DATA_TYPES[ModuleName.SCREEN_RENDERING].toLowerCase(),
+ }),
+ t('Drill down to specific suspect operations.'),
+ tct('Correlate [dataType] performance with real-user metrics.', {
+ dataType: MODULE_DATA_TYPES[ModuleName.SCREEN_RENDERING].toLowerCase(),
+ }),
+ ],
+ supportedSdks: ['android', 'flutter', 'apple-ios', 'react-native'],
+ },
};
diff --git a/static/app/views/insights/common/queries/useHasFirstSpan.tsx b/static/app/views/insights/common/queries/useHasFirstSpan.tsx
index 5552d7c2218b7b..b8835047c9364e 100644
--- a/static/app/views/insights/common/queries/useHasFirstSpan.tsx
+++ b/static/app/views/insights/common/queries/useHasFirstSpan.tsx
@@ -25,6 +25,7 @@ const modulePropertyMap: Record<
// Renamed resource to assets
[ModuleName.RESOURCE]: 'hasInsightsAssets',
[ModuleName.AI]: 'hasInsightsLlmMonitoring',
+ [ModuleName.SCREEN_RENDERING]: 'hasInsightsScreenLoad', // Screen rendering and screen loads share similar spans
};
/**
diff --git a/static/app/views/insights/common/utils/moduleTitles.tsx b/static/app/views/insights/common/utils/moduleTitles.tsx
index cab5cbdbf69c0b..b430f1082554d5 100644
--- a/static/app/views/insights/common/utils/moduleTitles.tsx
+++ b/static/app/views/insights/common/utils/moduleTitles.tsx
@@ -6,6 +6,7 @@ import {MODULE_TITLE as HTTP_MODULE_TITLE} from 'sentry/views/insights/http/sett
import {MODULE_TITLE as AI_MODULE_TITLE} from 'sentry/views/insights/llmMonitoring/settings';
import {MODULE_TITLE as APP_STARTS_MODULE_TITLE} from 'sentry/views/insights/mobile/appStarts/settings';
import {MODULE_TITLE as SCREEN_LOADS_MODULE_TITLE} from 'sentry/views/insights/mobile/screenload/settings';
+import {MODULE_TITLE as SCREEN_RENDERING_MODULE_TITLE} from 'sentry/views/insights/mobile/screenRendering/settings';
import {MODULE_TITLE as MOBILE_VITALS_MODULE_TITLE} from 'sentry/views/insights/mobile/screens/settings';
import {MODULE_TITLE as MOBILE_UI_MODULE_TITLE} from 'sentry/views/insights/mobile/ui/settings';
import {MODULE_TITLE as QUEUE_MODULE_TITLE} from 'sentry/views/insights/queues/settings';
@@ -23,5 +24,6 @@ export const MODULE_TITLES: Record = {
[ModuleName.AI]: AI_MODULE_TITLE,
[ModuleName.MOBILE_UI]: MOBILE_UI_MODULE_TITLE,
[ModuleName.MOBILE_SCREENS]: MOBILE_VITALS_MODULE_TITLE,
+ [ModuleName.SCREEN_RENDERING]: SCREEN_RENDERING_MODULE_TITLE,
[ModuleName.OTHER]: '',
};
diff --git a/static/app/views/insights/common/utils/useModuleURL.tsx b/static/app/views/insights/common/utils/useModuleURL.tsx
index 886e4eaf6cc513..eb2bf01ec59ef6 100644
--- a/static/app/views/insights/common/utils/useModuleURL.tsx
+++ b/static/app/views/insights/common/utils/useModuleURL.tsx
@@ -8,6 +8,7 @@ import {BASE_URL as HTTP_BASE_URL} from 'sentry/views/insights/http/settings';
import {BASE_URL as AI_BASE_URL} from 'sentry/views/insights/llmMonitoring/settings';
import {BASE_URL as APP_STARTS_BASE_URL} from 'sentry/views/insights/mobile/appStarts/settings';
import {BASE_URL as SCREEN_LOADS_BASE_URL} from 'sentry/views/insights/mobile/screenload/settings';
+import {BASE_URL as SCREEN_RENDERING_BASE_URL} from 'sentry/views/insights/mobile/screenRendering/settings';
import {BASE_URL as MOBILE_SCREENS_BASE_URL} from 'sentry/views/insights/mobile/screens/settings';
import {BASE_URL as MOBILE_UI_BASE_URL} from 'sentry/views/insights/mobile/ui/settings';
import {DOMAIN_VIEW_BASE_URL} from 'sentry/views/insights/pages/settings';
@@ -31,6 +32,7 @@ export const MODULE_BASE_URLS: Record = {
[ModuleName.AI]: AI_BASE_URL,
[ModuleName.MOBILE_UI]: MOBILE_UI_BASE_URL,
[ModuleName.MOBILE_SCREENS]: MOBILE_SCREENS_BASE_URL,
+ [ModuleName.SCREEN_RENDERING]: SCREEN_RENDERING_BASE_URL,
[ModuleName.OTHER]: '',
};
diff --git a/static/app/views/insights/common/views/spans/selectors/actionSelector.tsx b/static/app/views/insights/common/views/spans/selectors/actionSelector.tsx
index f3447c0c37695d..90289d2cf6b8b2 100644
--- a/static/app/views/insights/common/views/spans/selectors/actionSelector.tsx
+++ b/static/app/views/insights/common/views/spans/selectors/actionSelector.tsx
@@ -121,6 +121,7 @@ const LABEL_FOR_MODULE_NAME: {[key in ModuleName]: ReactNode} = {
other: t('Action'),
'mobile-ui': t('Action'),
'mobile-screens': t('Action'),
+ 'screen-rendering': t('Action'),
ai: 'Action',
};
diff --git a/static/app/views/insights/common/views/spans/selectors/domainSelector.tsx b/static/app/views/insights/common/views/spans/selectors/domainSelector.tsx
index 3570d0ea74b4cc..2049b4e507fb9a 100644
--- a/static/app/views/insights/common/views/spans/selectors/domainSelector.tsx
+++ b/static/app/views/insights/common/views/spans/selectors/domainSelector.tsx
@@ -182,6 +182,7 @@ const LABEL_FOR_MODULE_NAME: {[key in ModuleName]: ReactNode} = {
resource: t('Resource'),
other: t('Domain'),
ai: t('Domain'),
+ 'screen-rendering': t('Domain'),
'mobile-ui': t('Domain'),
'mobile-screens': t('Domain'),
};
diff --git a/static/app/views/insights/common/views/spans/spanTimeCharts.tsx b/static/app/views/insights/common/views/spans/spanTimeCharts.tsx
index 7fa4a5e6ce7005..79ca813ebd1078 100644
--- a/static/app/views/insights/common/views/spans/spanTimeCharts.tsx
+++ b/static/app/views/insights/common/views/spans/spanTimeCharts.tsx
@@ -106,6 +106,7 @@ export function SpanTimeCharts({
[ModuleName.AI]: [],
[ModuleName.MOBILE_UI]: [],
[ModuleName.MOBILE_SCREENS]: [],
+ [ModuleName.SCREEN_RENDERING]: [],
[ModuleName.OTHER]: [],
};
diff --git a/static/app/views/insights/mobile/screenRendering/screenRenderingContent.tsx b/static/app/views/insights/mobile/screenRendering/screenRenderingContent.tsx
new file mode 100644
index 00000000000000..d143fdf36edf39
--- /dev/null
+++ b/static/app/views/insights/mobile/screenRendering/screenRenderingContent.tsx
@@ -0,0 +1,5 @@
+import ScreensOverview from 'sentry/views/insights/mobile/screens/components/screensOverview';
+
+export function ScreenRenderingContent() {
+ return ;
+}
diff --git a/static/app/views/insights/mobile/screenRendering/screenRenderingLandingPage.tsx b/static/app/views/insights/mobile/screenRendering/screenRenderingLandingPage.tsx
new file mode 100644
index 00000000000000..e4dd340e4c7d60
--- /dev/null
+++ b/static/app/views/insights/mobile/screenRendering/screenRenderingLandingPage.tsx
@@ -0,0 +1,76 @@
+import styled from '@emotion/styled';
+
+import ErrorBoundary from 'sentry/components/errorBoundary';
+import * as Layout from 'sentry/components/layouts/thirds';
+import {space} from 'sentry/styles/space';
+import {PageAlert, PageAlertProvider} from 'sentry/utils/performance/contexts/pageAlert';
+import {ModulePageFilterBar} from 'sentry/views/insights/common/components/modulePageFilterBar';
+import {ModulePageProviders} from 'sentry/views/insights/common/components/modulePageProviders';
+import {ModulesOnboarding} from 'sentry/views/insights/common/components/modulesOnboarding';
+import {ReleaseComparisonSelector} from 'sentry/views/insights/common/components/releaseSelector';
+import useCrossPlatformProject from 'sentry/views/insights/mobile/common/queries/useCrossPlatformProject';
+import {PlatformSelector} from 'sentry/views/insights/mobile/screenload/components/platformSelector';
+import {ScreenRenderingContent} from 'sentry/views/insights/mobile/screenRendering/screenRenderingContent';
+import {MODULE_TITLE} from 'sentry/views/insights/mobile/screenRendering/settings';
+import {MobileHeader} from 'sentry/views/insights/pages/mobile/mobilePageHeader';
+import {MODULE_FEATURE_MAP} from 'sentry/views/insights/settings';
+import {ModuleName} from 'sentry/views/insights/types';
+
+export function ScreenRenderingModule() {
+ const {isProjectCrossPlatform} = useCrossPlatformProject();
+
+ return (
+
+
+ }
+ />
+
+
+
+
+ }
+ />
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
+
+function PageWithProviders() {
+ return (
+
+
+
+ );
+}
+
+export default PageWithProviders;
+
+const Container = styled('div')`
+ display: grid;
+ grid-template-rows: auto auto auto;
+ gap: ${space(2)};
+ margin-bottom: ${space(2)};
+
+ @media (min-width: ${p => p.theme.breakpoints.large}) {
+ grid-template-rows: auto;
+ grid-template-columns: auto 1fr auto;
+ }
+`;
diff --git a/static/app/views/insights/mobile/screenRendering/screenRenderingSummaryPage.tsx b/static/app/views/insights/mobile/screenRendering/screenRenderingSummaryPage.tsx
new file mode 100644
index 00000000000000..7e4a38ebeb5208
--- /dev/null
+++ b/static/app/views/insights/mobile/screenRendering/screenRenderingSummaryPage.tsx
@@ -0,0 +1,53 @@
+import {Fragment} from 'react';
+
+import * as Layout from 'sentry/components/layouts/thirds';
+import {t} from 'sentry/locale';
+import {useLocation} from 'sentry/utils/useLocation';
+import * as ModuleLayout from 'sentry/views/insights/common/components/moduleLayout';
+import {ModulePageProviders} from 'sentry/views/insights/common/components/modulePageProviders';
+import {
+ DATA_TYPE,
+ SUMMARY_PAGE_TITLE,
+} from 'sentry/views/insights/mobile/screenRendering/settings';
+import {ScreenSummaryContent} from 'sentry/views/insights/mobile/ui/views/screenSummaryPage';
+import {MobileHeader} from 'sentry/views/insights/pages/mobile/mobilePageHeader';
+import {MODULE_FEATURE_MAP} from 'sentry/views/insights/settings';
+import {ModuleName} from 'sentry/views/insights/types';
+
+function ScreenRenderingSummary() {
+ const location = useLocation();
+
+ const {transaction: transactionName} = location.query;
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
+
+function PageWithProviders() {
+ return (
+
+
+
+ );
+}
+
+export default PageWithProviders;
diff --git a/static/app/views/insights/mobile/screenRendering/settings.ts b/static/app/views/insights/mobile/screenRendering/settings.ts
new file mode 100644
index 00000000000000..aba6a2259ef66e
--- /dev/null
+++ b/static/app/views/insights/mobile/screenRendering/settings.ts
@@ -0,0 +1,17 @@
+import {t} from 'sentry/locale';
+
+export const MODULE_TITLE = t('Screen Rendering');
+export const DATA_TYPE = t('Screen Render');
+export const DATA_TYPE_PLURAL = t('Screen Renders');
+
+export const CHART_HEIGHT = 160;
+
+export const MODULE_DESCRIPTION = t('TODO');
+export const MODULE_DOC_LINK = 'TODO';
+
+export const BASE_URL = 'screen-rendering';
+export const SUMMARY_PAGE_BASE_URL = 'details';
+
+export const SUMMARY_PAGE_TITLE = t('Render Summary');
+
+export const MODULE_FEATURES = ['insights-addon-modules', 'insights-domain-view'];
diff --git a/static/app/views/insights/mobile/screens/components/screensOverviewTable.tsx b/static/app/views/insights/mobile/screens/components/screensOverviewTable.tsx
index 481243673060c0..1596fdb39c5d07 100644
--- a/static/app/views/insights/mobile/screens/components/screensOverviewTable.tsx
+++ b/static/app/views/insights/mobile/screens/components/screensOverviewTable.tsx
@@ -9,9 +9,12 @@ import type EventView from 'sentry/utils/discover/eventView';
import {NumberContainer} from 'sentry/utils/discover/styles';
import normalizeUrl from 'sentry/utils/url/normalizeUrl';
import {useLocation} from 'sentry/utils/useLocation';
+import useOrganization from 'sentry/utils/useOrganization';
import {OverflowEllipsisTextContainer} from 'sentry/views/insights/common/components/textAlign';
import {useModuleURL} from 'sentry/views/insights/common/utils/useModuleURL';
import {ScreensTable} from 'sentry/views/insights/mobile/common/components/tables/screensTable';
+import {SUMMARY_PAGE_BASE_URL} from 'sentry/views/insights/mobile/screenRendering/settings';
+import {isModuleEnabled} from 'sentry/views/insights/pages/utils';
import {ModuleName} from 'sentry/views/insights/types';
type Props = {
@@ -23,8 +26,13 @@ type Props = {
function ScreensOverviewTable({data, eventView, isLoading, pageLinks}: Props) {
const moduleURL = useModuleURL('mobile-screens');
+ const screenRenderingModuleUrl = useModuleURL(ModuleName.SCREEN_RENDERING);
+
+ const organization = useOrganization();
const location = useLocation();
+ const isMobileScreensEnabled = isModuleEnabled(ModuleName.MOBILE_SCREENS, organization);
+
const columnNameMap = {
transaction: t('Screen'),
[`count()`]: t('Screen Loads'),
@@ -43,13 +51,18 @@ function ScreensOverviewTable({data, eventView, isLoading, pageLinks}: Props) {
const field = String(column.key);
if (field === 'transaction') {
- const link = normalizeUrl(
- `${moduleURL}/details/?${qs.stringify({
- ...location.query,
- project: row['project.id'],
- transaction: row.transaction,
- })}`
- );
+ const queryString = qs.stringify({
+ ...location.query,
+ project: row['project.id'],
+ transaction: row.transaction,
+ });
+
+ const link = isMobileScreensEnabled
+ ? normalizeUrl(`${moduleURL}/details/?${queryString}`)
+ : normalizeUrl(
+ `${screenRenderingModuleUrl}/${SUMMARY_PAGE_BASE_URL}/?${queryString}`
+ );
+
return (
diff --git a/static/app/views/insights/mobile/ui/components/tables/spanOperationTable.tsx b/static/app/views/insights/mobile/ui/components/tables/spanOperationTable.tsx
index 19773097050832..49770d19ecd341 100644
--- a/static/app/views/insights/mobile/ui/components/tables/spanOperationTable.tsx
+++ b/static/app/views/insights/mobile/ui/components/tables/spanOperationTable.tsx
@@ -11,6 +11,7 @@ import {DiscoverDatasets} from 'sentry/utils/discover/types';
import {decodeList, decodeScalar} from 'sentry/utils/queryString';
import {MutableSearch} from 'sentry/utils/tokenizeSearch';
import {useLocation} from 'sentry/utils/useLocation';
+import useOrganization from 'sentry/utils/useOrganization';
import usePageFilters from 'sentry/utils/usePageFilters';
import {
PRIMARY_RELEASE_ALIAS,
@@ -25,7 +26,9 @@ import type {SpanOperationTableProps} from 'sentry/views/insights/mobile/common/
import {ScreensTable} from 'sentry/views/insights/mobile/common/components/tables/screensTable';
import {useTableQuery} from 'sentry/views/insights/mobile/screenload/components/tables/screensTable';
import {MobileCursors} from 'sentry/views/insights/mobile/screenload/constants';
+import {SUMMARY_PAGE_BASE_URL} from 'sentry/views/insights/mobile/screenRendering/settings';
import {Referrer} from 'sentry/views/insights/mobile/ui/referrers';
+import {isModuleEnabled} from 'sentry/views/insights/pages/utils';
import {
ModuleName,
SpanMetricsField,
@@ -42,7 +45,9 @@ export function SpanOperationTable({
secondaryRelease,
}: SpanOperationTableProps) {
const moduleURL = useModuleURL('mobile-ui');
+ const screenRenderingModuleUrl = useModuleURL(ModuleName.SCREEN_RENDERING);
const location = useLocation();
+ const organization = useOrganization();
const {selection} = usePageFilters();
const cursor = decodeScalar(location.query?.[MobileCursors.SPANS_TABLE]);
@@ -52,6 +57,8 @@ export function SpanOperationTable({
location.query[SpanMetricsField.USER_GEO_SUBREGION]
) as SubregionCode[];
+ const isMobileScreensEnabled = isModuleEnabled(ModuleName.MOBILE_SCREENS, organization);
+
// TODO: These filters seem to be too aggressive, check that they are ingesting properly
const searchQuery = new MutableSearch([
// 'has:span.description',
@@ -155,7 +162,10 @@ export function SpanOperationTable({
if (column.key === SPAN_DESCRIPTION) {
const label = row[SpanMetricsField.SPAN_DESCRIPTION];
- const pathname = `${moduleURL}/spans/`;
+ const pathname = isMobileScreensEnabled
+ ? `${moduleURL}/spans/`
+ : `${screenRenderingModuleUrl}/${SUMMARY_PAGE_BASE_URL}/`;
+
const query = {
...location.query,
transaction,
diff --git a/static/app/views/insights/pages/mobile/mobilePageHeader.tsx b/static/app/views/insights/pages/mobile/mobilePageHeader.tsx
index d279da1e05b487..6218db6946626f 100644
--- a/static/app/views/insights/pages/mobile/mobilePageHeader.tsx
+++ b/static/app/views/insights/pages/mobile/mobilePageHeader.tsx
@@ -39,7 +39,12 @@ export function MobileHeader({
const modules = hasMobileScreens
? [ModuleName.MOBILE_SCREENS]
- : [ModuleName.APP_START, ModuleName.SCREEN_LOAD, ModuleName.MOBILE_UI];
+ : [
+ ModuleName.APP_START,
+ ModuleName.SCREEN_LOAD,
+ ModuleName.SCREEN_RENDERING,
+ ModuleName.MOBILE_UI,
+ ];
return (
= {
[ModuleName.AI]: AI_MODULE_TITLE,
[ModuleName.MOBILE_UI]: MOBILE_UI_MODULE_TITLE,
[ModuleName.MOBILE_SCREENS]: MOBILE_SCREENS_MODULE_TITLE,
+ [ModuleName.SCREEN_RENDERING]: SCREEN_RENDERING_MODULE_TITLE,
[ModuleName.OTHER]: '',
};
@@ -108,6 +116,7 @@ export const MODULE_DATA_TYPES: Record = {
[ModuleName.AI]: AI_DATA_TYPE,
[ModuleName.MOBILE_UI]: t('Mobile UI'),
[ModuleName.MOBILE_SCREENS]: MOBILE_SCREENS_DATA_TYPE,
+ [ModuleName.SCREEN_RENDERING]: SCREEN_RENDERING_DATA_TYPE,
[ModuleName.OTHER]: '',
};
@@ -123,6 +132,7 @@ export const MODULE_DATA_TYPES_PLURAL: Record = {
[ModuleName.AI]: AI_DATA_TYPE_PLURAL,
[ModuleName.MOBILE_UI]: t('Mobile UI'),
[ModuleName.MOBILE_SCREENS]: MOBILE_SCREENS_DATA_TYPE_PLURAL,
+ [ModuleName.SCREEN_RENDERING]: SCREEN_RENDERING_DATA_TYPE_PLURAL,
[ModuleName.OTHER]: '',
};
@@ -138,10 +148,11 @@ export const MODULE_PRODUCT_DOC_LINKS: Record = {
[ModuleName.AI]: AI_MODULE_DOC_LINK,
[ModuleName.MOBILE_UI]: MODULE_UI_DOC_LINK,
[ModuleName.MOBILE_SCREENS]: MODULE_SCREENS_DOC_LINK,
+ [ModuleName.SCREEN_RENDERING]: SCREEN_RENDERING_MODULE_DOC_LINK,
[ModuleName.OTHER]: '',
};
-export const MODULE_FEATURE_MAP: Partial> = {
+export const MODULE_FEATURE_MAP: Record = {
[ModuleName.DB]: DB_MODULE_FEATURES,
[ModuleName.APP_START]: APP_STARTS_MODULE_FEATURES,
[ModuleName.HTTP]: HTTP_MODULE_FEATURES,
@@ -153,4 +164,6 @@ export const MODULE_FEATURE_MAP: Partial> = {
[ModuleName.SCREEN_LOAD]: SCREEN_LOADS_MODULE_FEATURES,
[ModuleName.MOBILE_UI]: MOBILE_UI_MODULE_FEATURES,
[ModuleName.MOBILE_SCREENS]: [MOBILE_SCREENS_MODULE_FEATURE],
+ [ModuleName.SCREEN_RENDERING]: SCREEN_RENDERING_MODULE_FEATURES,
+ [ModuleName.OTHER]: [],
};
diff --git a/static/app/views/insights/types.tsx b/static/app/views/insights/types.tsx
index 751cd8c1f34085..81f36d2321e158 100644
--- a/static/app/views/insights/types.tsx
+++ b/static/app/views/insights/types.tsx
@@ -16,6 +16,7 @@ export enum ModuleName {
AI = 'ai',
MOBILE_UI = 'mobile-ui',
MOBILE_SCREENS = 'mobile-screens',
+ SCREEN_RENDERING = 'screen-rendering',
OTHER = 'other',
}