import styled from '@emotion/styled'; import {openInsightChartModal} from 'sentry/actionCreators/modal'; import ReleaseSeries from 'sentry/components/charts/releaseSeries'; import {CHART_PALETTE} from 'sentry/constants/chartPalette'; import usePageFilters from 'sentry/utils/usePageFilters'; import { AreaChartWidget, type AreaChartWidgetProps, } from 'sentry/views/dashboards/widgets/areaChartWidget/areaChartWidget'; import { AreaChartWidgetVisualization, type AreaChartWidgetVisualizationProps, } from 'sentry/views/dashboards/widgets/areaChartWidget/areaChartWidgetVisualization'; import type {Aliases} from 'sentry/views/dashboards/widgets/common/types'; import {THROUGHPUT_COLOR} from '../../colors'; import type {DiscoverSeries} from '../queries/useDiscoverSeries'; import {convertSeriesToTimeseries} from '../utils/convertSeriesToTimeseries'; interface InsightsAreaChartWidgetProps extends Pick { aliases: Aliases; error: AreaChartWidgetProps['error'] | null; series: DiscoverSeries[]; } export function InsightsAreaChartWidget(props: InsightsAreaChartWidgetProps) { const pageFilters = usePageFilters(); const {start, end, period, utc} = pageFilters.selection.datetime; const {projects, environments} = pageFilters.selection; const visualizationProps: AreaChartWidgetVisualizationProps = { timeseries: (props.series.filter(Boolean) ?? [])?.map(serie => { const timeserie = convertSeriesToTimeseries(serie); return { ...timeserie, color: serie.color ?? COMMON_COLORS[timeserie.field], }; }), aliases: props.aliases, }; return ( { openInsightChartModal({ title: props.title, children: ( {({releases}) => { return ( ({ timestamp: release.date, version: release.version, })) : [] } /> ); }} ), }); }} /> ); } const COMMON_COLORS: Record = { 'spm()': THROUGHPUT_COLOR, 'avg(messaging.message.receive.latency)': CHART_PALETTE[2][1], 'avg(span.duration)': CHART_PALETTE[2][2], }; const ChartContainer = styled('div')` height: 220px; `; const ModalChartContainer = styled('div')` height: 360px; `;