import type {InjectedRouter} from 'react-router'; import type {Theme} from '@emotion/react'; import type {Query} from 'history'; import ChartZoom from 'sentry/components/charts/chartZoom'; import ErrorPanel from 'sentry/components/charts/errorPanel'; import type {LineChartProps} from 'sentry/components/charts/lineChart'; import {LineChart} from 'sentry/components/charts/lineChart'; import ReleaseSeries from 'sentry/components/charts/releaseSeries'; import TransitionChart from 'sentry/components/charts/transitionChart'; import TransparentLoadingMask from 'sentry/components/charts/transparentLoadingMask'; import Placeholder from 'sentry/components/placeholder'; import {IconWarning} from 'sentry/icons'; import type {Series} from 'sentry/types/echarts'; import { axisLabelFormatter, getDurationUnit, tooltipFormatter, } from 'sentry/utils/discover/charts'; import {aggregateOutputType} from 'sentry/utils/discover/fields'; import getDynamicText from 'sentry/utils/getDynamicText'; import {TransactionsListOption} from 'sentry/views/releases/detail/overview'; type Props = { errored: boolean; loading: boolean; queryExtra: Query; reloading: boolean; router: InjectedRouter; theme: Theme; series?: Series[]; timeFrame?: { end: number; start: number; }; } & Omit, 'children' | 'queryExtra'> & Pick; function Content({ errored, theme, series: data, timeFrame, start, end, period, projects, environments, loading, reloading, legend, utc, queryExtra, router, onLegendSelectChanged, }: Props) { if (errored) { return ( ); } const colors = (data && theme.charts.getColorPalette(data.length - 2)) || []; // Create a list of series based on the order of the fields, const series = data ? data.map((values, i: number) => ({ ...values, color: colors[i], })) : []; const durationUnit = getDurationUnit(series, legend); const chartOptions: Omit = { grid: { left: '10px', right: '10px', top: '40px', bottom: '0px', }, seriesOptions: { showSymbol: false, }, tooltip: { trigger: 'axis', valueFormatter: (value, label) => tooltipFormatter(value, aggregateOutputType(label)), }, xAxis: timeFrame ? { min: timeFrame.start, max: timeFrame.end, } : undefined, yAxis: { minInterval: durationUnit, axisLabel: { color: theme.chartLabel, // p75(measurements.fcp) coerces the axis to be time based formatter: (value: number) => axisLabelFormatter(value, 'duration', undefined, durationUnit), }, }, }; return ( {zoomRenderProps => ( {({releaseSeries}) => ( {getDynamicText({ value: ( ), fixed: , })} )} )} ); } export default Content;