import {Fragment} from 'react'; import * as qs from 'query-string'; import Duration from 'sentry/components/duration'; import Link from 'sentry/components/links/link'; import {t} from 'sentry/locale'; import type {TableData} from 'sentry/utils/discover/discoverQuery'; 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 = { data: TableData | undefined; eventView: EventView; isLoading: boolean; pageLinks: string | undefined; }; 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'), [`avg(mobile.slow_frames)`]: t('Slow Frames'), [`avg(mobile.frozen_frames)`]: t('Frozen Frames'), [`avg(measurements.time_to_initial_display)`]: t('TTID'), [`avg(measurements.time_to_full_display)`]: t('TTFD'), ['avg(measurements.app_start_warm)']: t('Warm Start'), ['avg(measurements.app_start_cold)']: t('Cold Start'), }; function renderBodyCell(column, row): React.ReactNode | null { if (!data) { return null; } const field = String(column.key); if (field === '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 ( {row.transaction} ); } // backend doesn't provide unit for frames_delay, manually format it right now if (field === `avg(mobile.frames_delay)`) { return ( {row[field] ? ( ) : ( '-' )} ); } return null; } return ( ); } export default ScreensOverviewTable;