1
- import { useTheme } from '@emotion/react' ;
2
1
import styled from '@emotion/styled' ;
3
2
4
- import { t } from 'sentry/locale' ;
5
3
import type { Series } from 'sentry/types/echarts' ;
6
- import { MutableSearch } from 'sentry/utils/tokenizeSearch' ;
7
4
import { ORDER } from 'sentry/views/insights/browser/webVitals/components/charts/performanceScoreChart' ;
8
5
import type { WebVitalsScoreBreakdown } from 'sentry/views/insights/browser/webVitals/queries/storedScoreQueries/useProjectWebVitalsScoresTimeseriesQuery' ;
9
6
import type { WebVitals } from 'sentry/views/insights/browser/webVitals/types' ;
10
- import { getWeights } from 'sentry/views/insights/browser/webVitals/utils/getWeights' ;
11
- import type { BrowserType } from 'sentry/views/insights/browser/webVitals/utils/queryParameterDecoders/browserType' ;
12
- import { useDefaultWebVitalsQuery } from 'sentry/views/insights/browser/webVitals/utils/useDefaultQuery' ;
13
- import { InsightsTimeSeriesWidget } from 'sentry/views/insights/common/components/insightsTimeSeriesWidget' ;
14
- import {
15
- type DiscoverSeries ,
16
- useMetricsSeries ,
17
- } from 'sentry/views/insights/common/queries/useDiscoverSeries' ;
18
- import { SpanMetricsField , type SubregionCode } from 'sentry/views/insights/types' ;
19
-
20
- import { WebVitalsWeightList } from './webVitalWeightList' ;
21
-
22
- type Props = {
23
- browserTypes ?: BrowserType [ ] ;
24
- subregions ?: SubregionCode [ ] ;
25
- transaction ?: string ;
26
- } ;
7
+ import { PerformanceScoreBreakdownChartWidget } from 'sentry/views/insights/common/components/widgets/performanceScoreBreakdownChartWidget' ;
27
8
28
9
export function formatTimeSeriesResultsToChartData (
29
10
data : WebVitalsScoreBreakdown ,
@@ -44,99 +25,10 @@ export function formatTimeSeriesResultsToChartData(
44
25
} ) ;
45
26
}
46
27
47
- export function PerformanceScoreBreakdownChart ( {
48
- transaction,
49
- browserTypes,
50
- subregions,
51
- } : Props ) {
52
- const theme = useTheme ( ) ;
53
- const segmentColors = theme . chart . getColorPalette ( 3 ) . slice ( 0 , 5 ) ;
54
- const defaultQuery = useDefaultWebVitalsQuery ( ) ;
55
-
56
- const search = new MutableSearch ( `${ defaultQuery } has:measurements.score.total` ) ;
57
-
58
- if ( transaction ) {
59
- search . addFilterValue ( 'transaction' , transaction ) ;
60
- }
61
-
62
- if ( subregions ) {
63
- search . addDisjunctionFilterValues ( SpanMetricsField . USER_GEO_SUBREGION , subregions ) ;
64
- }
65
-
66
- if ( browserTypes ) {
67
- search . addDisjunctionFilterValues ( SpanMetricsField . BROWSER_NAME , browserTypes ) ;
68
- }
69
-
70
- const {
71
- data : vitalScoresData ,
72
- isLoading : areVitalScoresLoading ,
73
- error : vitalScoresError ,
74
- } = useMetricsSeries (
75
- {
76
- search,
77
- yAxis : [
78
- 'performance_score(measurements.score.lcp)' ,
79
- 'performance_score(measurements.score.fcp)' ,
80
- 'performance_score(measurements.score.cls)' ,
81
- 'performance_score(measurements.score.inp)' ,
82
- 'performance_score(measurements.score.ttfb)' ,
83
- 'count()' ,
84
- ] ,
85
- transformAliasToInputFormat : true ,
86
- } ,
87
- 'api.performance.browser.web-vitals.timeseries-scores2'
88
- ) ;
89
-
90
- const webVitalsThatHaveData : WebVitals [ ] = vitalScoresData
91
- ? ORDER . filter ( webVital => {
92
- const key = `performance_score(measurements.score.${ webVital } )` as const ;
93
- const series = vitalScoresData [ key ] ;
94
-
95
- return series . data . some ( datum => datum . value > 0 ) ;
96
- } )
97
- : [ ] ;
98
-
99
- const weights = getWeights ( webVitalsThatHaveData ) ;
100
-
101
- const allSeries : DiscoverSeries [ ] = vitalScoresData
102
- ? ORDER . map ( ( webVital , index ) => {
103
- const key = `performance_score(measurements.score.${ webVital } )` as const ;
104
- const series = vitalScoresData [ key ] ;
105
-
106
- const scaledSeries : DiscoverSeries = {
107
- ...series ,
108
- data : series . data . map ( datum => {
109
- return {
110
- ...datum ,
111
- value : datum . value * weights [ webVital ] ,
112
- } ;
113
- } ) ,
114
- color : segmentColors [ index ] ,
115
- meta : {
116
- // TODO: The backend doesn't return these score fields with the "score" type yet. Fill this in manually for now.
117
- fields : {
118
- ...series . meta ?. fields ,
119
- [ key ] : 'score' ,
120
- } ,
121
- units : series . meta ?. units ,
122
- } ,
123
- } ;
124
-
125
- return scaledSeries ;
126
- } )
127
- : [ ] ;
128
-
28
+ export function PerformanceScoreBreakdownChart ( ) {
129
29
return (
130
30
< ChartContainer >
131
- < InsightsTimeSeriesWidget
132
- title = { t ( 'Score Breakdown' ) }
133
- height = "100%"
134
- visualizationType = "area"
135
- isLoading = { areVitalScoresLoading }
136
- error = { vitalScoresError }
137
- series = { allSeries }
138
- description = { < WebVitalsWeightList weights = { weights } /> }
139
- />
31
+ < PerformanceScoreBreakdownChartWidget />
140
32
</ ChartContainer >
141
33
) ;
142
34
}
0 commit comments