lineChart.tsx 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import {useMemo} from 'react';
  2. import {useTheme} from '@emotion/react';
  3. import type {FunctionRegressionPercentileData} from 'sentry/chartcuterie/performance';
  4. import type {ChartType} from 'sentry/chartcuterie/types';
  5. import ChartZoom from 'sentry/components/charts/chartZoom';
  6. import {LineChart as EChartsLineChart} from 'sentry/components/charts/lineChart';
  7. import getBreakpointChartOptionsFromData from 'sentry/components/events/eventStatisticalDetector/breakpointChartOptions';
  8. import type {PageFilters} from 'sentry/types';
  9. import type {EventsStatsData} from 'sentry/types/organization';
  10. import useRouter from 'sentry/utils/useRouter';
  11. import type {NormalizedTrendsTransaction} from 'sentry/views/performance/trends/types';
  12. interface ChartProps {
  13. chartType: ChartType;
  14. datetime: PageFilters['datetime'];
  15. evidenceData: NormalizedTrendsTransaction;
  16. percentileData: EventsStatsData | FunctionRegressionPercentileData;
  17. trendFunctionName?: string;
  18. }
  19. function LineChart({datetime, percentileData, evidenceData, chartType}: ChartProps) {
  20. const theme = useTheme();
  21. const router = useRouter();
  22. const {series, chartOptions} = useMemo(() => {
  23. return getBreakpointChartOptionsFromData(
  24. {percentileData, evidenceData},
  25. chartType,
  26. theme
  27. );
  28. }, [percentileData, evidenceData, chartType, theme]);
  29. return (
  30. <ChartZoom router={router} {...datetime}>
  31. {zoomRenderProps => (
  32. <EChartsLineChart {...zoomRenderProps} {...chartOptions} series={series} />
  33. )}
  34. </ChartZoom>
  35. );
  36. }
  37. export default LineChart;