@@ -25,7 +25,9 @@ import {useApiQuery} from 'sentry/utils/queryClient';
25
25
import { useLocalStorageState } from 'sentry/utils/useLocalStorageState' ;
26
26
import { useLocation } from 'sentry/utils/useLocation' ;
27
27
import useOrganization from 'sentry/utils/useOrganization' ;
28
+ import { useReleaseStats } from 'sentry/utils/useReleaseStats' ;
28
29
import { getBucketSize } from 'sentry/views/dashboards/utils/getBucketSize' ;
30
+ import { useReleaseBubbles } from 'sentry/views/dashboards/widgets/timeSeriesWidget/releaseBubbles/useReleaseBubbles' ;
29
31
import { useIssueDetails } from 'sentry/views/issueDetails/streamline/context' ;
30
32
import { useCurrentEventMarklineSeries } from 'sentry/views/issueDetails/streamline/hooks/useEventMarkLineSeries' ;
31
33
import useFlagSeries from 'sentry/views/issueDetails/streamline/hooks/useFlagSeries' ;
@@ -79,6 +81,7 @@ export function EventGraph({group, event, ...styleProps}: EventGraphProps) {
79
81
const config = getConfigForIssueType ( group , group . project ) ;
80
82
const { dispatch} = useIssueDetails ( ) ;
81
83
const { currentTab} = useGroupDetailsRoute ( ) ;
84
+ const hasReleaseBubblesSeries = organization . features . includes ( 'release-bubbles-ui' ) ;
82
85
83
86
const {
84
87
data : groupStats = { } ,
@@ -176,7 +179,43 @@ export function EventGraph({group, event, ...styleProps}: EventGraphProps) {
176
179
event,
177
180
group,
178
181
} ) ;
179
- const releaseSeries = useReleaseMarkLineSeries ( { group} ) ;
182
+
183
+ const { releases = [ ] } = useReleaseStats (
184
+ {
185
+ projects : eventView . project ,
186
+ environments : eventView . environment ,
187
+ datetime : {
188
+ start : eventView . start ,
189
+ end : eventView . end ,
190
+ period : eventView . statsPeriod ,
191
+ } ,
192
+ } ,
193
+ {
194
+ staleTime : 0 ,
195
+ }
196
+ ) ;
197
+
198
+ const releaseSeries = useReleaseMarkLineSeries ( {
199
+ group,
200
+ releases : hasReleaseBubblesSeries ? [ ] : releases ,
201
+ } ) ;
202
+
203
+ const {
204
+ createReleaseBubbleHighlighter,
205
+ releaseBubbleEventHandlers,
206
+ releaseBubbleSeries,
207
+ releaseBubbleXAxis,
208
+ releaseBubbleGrid,
209
+ } = useReleaseBubbles ( {
210
+ minTime : eventSeries . length && ( eventSeries [ 0 ] ! . name as number ) ,
211
+ maxTime : eventSeries . length && ( eventSeries [ eventSeries . length - 1 ] ! . name as number ) ,
212
+ bubbleSize : 4 ,
213
+ bubblePadding : {
214
+ x : 1 ,
215
+ y : 2 ,
216
+ } ,
217
+ releases,
218
+ } ) ;
180
219
const flagSeries = useFlagSeries ( {
181
220
query : {
182
221
start : eventView . start ,
@@ -249,7 +288,7 @@ export function EventGraph({group, event, ...styleProps}: EventGraphProps) {
249
288
seriesData . push ( currentEventSeries as BarChartSeries ) ;
250
289
}
251
290
252
- if ( releaseSeries . markLine ) {
291
+ if ( releaseSeries ? .markLine ) {
253
292
seriesData . push ( releaseSeries as BarChartSeries ) ;
254
293
}
255
294
@@ -363,8 +402,11 @@ export function EventGraph({group, event, ...styleProps}: EventGraphProps) {
363
402
</ SummaryContainer >
364
403
< ChartContainer role = "figure" >
365
404
< BarChart
405
+ { ...releaseBubbleEventHandlers }
406
+ ref = { createReleaseBubbleHighlighter }
366
407
height = { 100 }
367
408
series = { series }
409
+ additionalSeries = { releaseBubbleSeries ? [ releaseBubbleSeries ] : [ ] }
368
410
legend = { legend }
369
411
onLegendSelectChanged = { onLegendSelectChanged }
370
412
showTimeInTooltip
@@ -373,6 +415,7 @@ export function EventGraph({group, event, ...styleProps}: EventGraphProps) {
373
415
right : 8 ,
374
416
top : 20 ,
375
417
bottom : 0 ,
418
+ ...releaseBubbleGrid ,
376
419
} }
377
420
tooltip = { {
378
421
formatAxisLabel : (
@@ -404,6 +447,9 @@ export function EventGraph({group, event, ...styleProps}: EventGraphProps) {
404
447
} ,
405
448
} ,
406
449
} }
450
+ xAxis = { {
451
+ ...releaseBubbleXAxis ,
452
+ } }
407
453
{ ...chartZoomProps }
408
454
/>
409
455
</ ChartContainer >
0 commit comments