11import { useCallback , useMemo } from 'react' ;
22
33import type { DateString } from 'sentry/types/core' ;
4+ import { defined } from 'sentry/utils' ;
45import { encodeSort } from 'sentry/utils/discover/eventView' ;
56import useApi from 'sentry/utils/useApi' ;
67import useOrganization from 'sentry/utils/useOrganization' ;
78import usePageFilters from 'sentry/utils/usePageFilters' ;
89import { useLogsPageParams } from 'sentry/views/explore/contexts/logs/logsPageParams' ;
910import { useExplorePageParams } from 'sentry/views/explore/contexts/pageParamsContext' ;
1011import {
11- isGroupBy ,
12- isVisualize ,
12+ isGroupBy as isLegacyGroupBy ,
13+ isVisualize as isLegacyVisualize ,
1314} from 'sentry/views/explore/contexts/pageParamsContext/aggregateFields' ;
1415import type { Mode } from 'sentry/views/explore/contexts/pageParamsContext/mode' ;
1516import { useChartInterval } from 'sentry/views/explore/hooks/useChartInterval' ;
@@ -18,6 +19,10 @@ import {
1819 useInvalidateSavedQuery ,
1920 type SavedQuery ,
2021} from 'sentry/views/explore/hooks/useGetSavedQueries' ;
22+ import { useQueryParams } from 'sentry/views/explore/queryParams/context' ;
23+ import { isGroupBy } from 'sentry/views/explore/queryParams/groupBy' ;
24+ import type { ReadableQueryParams } from 'sentry/views/explore/queryParams/readableQueryParams' ;
25+ import { isVisualize } from 'sentry/views/explore/queryParams/visualize' ;
2126
2227// Request payload type that matches the backend ExploreSavedQuerySerializer
2328type ExploreSavedQueryRequest = {
@@ -170,13 +175,20 @@ export function useLogsSaveQuery() {
170175 const pageFilters = usePageFilters ( ) ;
171176 const [ interval ] = useChartInterval ( ) ;
172177 const logsParams = useLogsPageParams ( ) ;
178+ const queryParams = useQueryParams ( ) ;
173179 const { id, title} = logsParams ;
174180
175181 const { saveQueryFromSavedQuery, updateQueryFromSavedQuery} = useFromSavedQuery ( ) ;
176182
177183 const requestData = useMemo ( ( ) : ExploreSavedQueryRequest => {
178- return convertLogsPageParamsToRequest ( logsParams , pageFilters , interval , title ?? '' ) ;
179- } , [ logsParams , pageFilters , interval , title ] ) ;
184+ return convertLogsPageParamsToRequest ( {
185+ logsParams,
186+ queryParams,
187+ pageFilters,
188+ interval,
189+ title : title ?? '' ,
190+ } ) ;
191+ } , [ logsParams , queryParams , pageFilters , interval , title ] ) ;
180192
181193 const { saveQueryApi, updateQueryApi} = useCreateOrUpdateSavedQuery ( id ) ;
182194
@@ -208,17 +220,21 @@ function convertExplorePageParamsToRequest(
208220
209221 const transformedAggregateFields = aggregateFields
210222 . filter ( aggregateField => {
211- if ( isGroupBy ( aggregateField ) ) {
223+ if ( isLegacyGroupBy ( aggregateField ) ) {
212224 return aggregateField . groupBy !== '' ;
213225 }
214226 return true ;
215227 } )
216228 . map ( aggregateField => {
217- return isVisualize ( aggregateField )
218- ? {
219- yAxes : [ aggregateField . yAxis ] ,
220- chartType : aggregateField . chartType ,
221- }
229+ return isLegacyVisualize ( aggregateField )
230+ ? defined ( aggregateField . selectedChartType )
231+ ? {
232+ yAxes : [ aggregateField . yAxis ] ,
233+ chartType : aggregateField . selectedChartType ,
234+ }
235+ : {
236+ yAxes : [ aggregateField . yAxis ] ,
237+ }
222238 : { groupBy : aggregateField . groupBy } ;
223239 } ) ;
224240
@@ -243,29 +259,45 @@ function convertExplorePageParamsToRequest(
243259 } ;
244260}
245261
246- function convertLogsPageParamsToRequest (
247- logsParams : ReturnType < typeof useLogsPageParams > ,
248- pageFilters : ReturnType < typeof usePageFilters > ,
249- interval : string ,
250- title : string
251- ) : ExploreSavedQueryRequest {
262+ function convertLogsPageParamsToRequest ( {
263+ logsParams,
264+ queryParams,
265+ pageFilters,
266+ interval,
267+ title,
268+ } : {
269+ interval : string ;
270+ logsParams : ReturnType < typeof useLogsPageParams > ;
271+ pageFilters : ReturnType < typeof usePageFilters > ;
272+ queryParams : ReadableQueryParams ;
273+ title : string ;
274+ } ) : ExploreSavedQueryRequest {
252275 const { selection} = pageFilters ;
253276 const { datetime, projects, environments} = selection ;
254277 const { start, end, period} = datetime ;
255278
256- const { sortBys, fields, search, mode, groupBy, aggregateFn, aggregateParam} =
257- logsParams ;
279+ const { sortBys, fields, search, mode} = logsParams ;
258280 const query = search ?. formatString ( ) ?? '' ;
259281
260- const aggregate =
261- aggregateFn && aggregateParam ? `${ aggregateFn } (${ aggregateParam } )` : undefined ;
262- const visualize = aggregate
263- ? [
264- {
265- yAxes : [ aggregate ] ,
266- } ,
267- ]
268- : undefined ;
282+ const aggregateFields = queryParams . aggregateFields . map ( aggregateField => {
283+ if ( isGroupBy ( aggregateField ) ) {
284+ return { groupBy : aggregateField . groupBy } ;
285+ }
286+
287+ if ( isVisualize ( aggregateField ) ) {
288+ if ( defined ( aggregateField . selectedChartType ) ) {
289+ return {
290+ yAxes : [ aggregateField . yAxis ] ,
291+ chartType : aggregateField . selectedChartType ,
292+ } ;
293+ }
294+ return {
295+ yAxes : [ aggregateField . yAxis ] ,
296+ } ;
297+ }
298+
299+ throw new Error ( `Unknown aggregate field: ${ JSON . stringify ( aggregateField ) } ` ) ;
300+ } ) ;
269301
270302 return {
271303 name : title ,
@@ -281,9 +313,8 @@ function convertLogsPageParamsToRequest(
281313 fields,
282314 orderby : sortBys [ 0 ] ? encodeSort ( sortBys [ 0 ] ) : undefined ,
283315 query,
284- groupby : groupBy ? [ groupBy ] : undefined ,
285316 mode,
286- visualize ,
317+ aggregateField : aggregateFields ,
287318 } ,
288319 ] ,
289320 } ;
0 commit comments