import {Fragment} from 'react';
import * as qs from 'query-string';
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 {decodeScalar} from 'sentry/utils/queryString';
import {useLocation} from 'sentry/utils/useLocation';
import TopResultsIndicator from 'sentry/views/discover/table/topResultsIndicator';
import {COLD_START_COLOR, WARM_START_COLOR} from 'sentry/views/insights/colors';
import {
PRIMARY_RELEASE_ALIAS,
SECONDARY_RELEASE_ALIAS,
} from 'sentry/views/insights/common/components/releaseSelector';
import {OverflowEllipsisTextContainer} from 'sentry/views/insights/common/components/textAlign';
import {useReleaseSelection} from 'sentry/views/insights/common/queries/useReleases';
import {useModuleURL} from 'sentry/views/insights/common/utils/useModuleURL';
import Breakdown from 'sentry/views/insights/mobile/appStarts/components/breakdown';
import {COLD_START_TYPE} from 'sentry/views/insights/mobile/appStarts/components/startTypeSelector';
import {ScreensTable} from 'sentry/views/insights/mobile/common/components/tables/screensTable';
import {TOP_SCREENS} from 'sentry/views/insights/mobile/constants';
import {ModuleName, SpanMetricsField} from 'sentry/views/insights/types';
type Props = {
data: TableData | undefined;
eventView: EventView;
isLoading: boolean;
pageLinks: string | undefined;
};
export function AppStartScreens({data, eventView, isLoading, pageLinks}: Props) {
const moduleURL = useModuleURL('app_start');
const location = useLocation();
const {primaryRelease, secondaryRelease} = useReleaseSelection();
const startType =
decodeScalar(location.query[SpanMetricsField.APP_START_TYPE]) ?? COLD_START_TYPE;
const columnNameMap = {
transaction: t('Screen'),
[`avg_if(measurements.app_start_cold,release,${primaryRelease})`]: t(
'Avg Cold Start (%s)',
PRIMARY_RELEASE_ALIAS
),
[`avg_if(measurements.app_start_cold,release,${secondaryRelease})`]: t(
'Avg Cold Start (%s)',
SECONDARY_RELEASE_ALIAS
),
[`avg_if(measurements.app_start_warm,release,${primaryRelease})`]: t(
'Avg Warm Start (%s)',
PRIMARY_RELEASE_ALIAS
),
[`avg_if(measurements.app_start_warm,release,${secondaryRelease})`]: t(
'Avg Warm Start (%s)',
SECONDARY_RELEASE_ALIAS
),
[`avg_compare(measurements.app_start_cold,release,${primaryRelease},${secondaryRelease})`]:
t('Change'),
[`avg_compare(measurements.app_start_warm,release,${primaryRelease},${secondaryRelease})`]:
t('Change'),
app_start_breakdown: t('Type Breakdown'),
'count_starts(measurements.app_start_cold)': t('Cold Start Count'),
'count_starts(measurements.app_start_warm)': t('Warm Start Count'),
};
const columnTooltipMap = {
[`avg_compare(measurements.app_start_cold,release,${primaryRelease},${secondaryRelease})`]:
t('Average Cold Start difference'),
[`avg_compare(measurements.app_start_warm,release,${primaryRelease},${secondaryRelease})`]:
t('Average Warm Start difference'),
};
function renderBodyCell(column, row): React.ReactNode {
if (!data) {
return null;
}
const index = data.data.indexOf(row);
const field = String(column.key);
if (field === 'transaction') {
return (
{row.transaction}
);
}
if (field === 'app_start_breakdown') {
return (
);
}
return null;
}
return (
);
}