@@ -555,31 +555,35 @@ export function WidgetQueryBuilderPage({
555555 }
556556 } , [ logsFacetsResult , metricRows , tracesFacetsResult , attributeKeys , attributeValues , resourceAttributeKeys , resourceAttributeValues ] )
557557
558- React . useEffect ( ( ) => {
559- if ( metricSelectionOptions . length === 0 ) return
560- setState ( ( current ) => {
561- const [ defaultMetricName , defaultMetricTypeRaw ] = metricSelectionOptions [ 0 ] . value . split ( "::" )
562- const defaultMetricType = defaultMetricTypeRaw as QueryBuilderMetricType
563- let changed = false
564- const queries = current . queries . map ( ( query ) => {
565- if ( query . dataSource !== "metrics" || query . metricName || ! defaultMetricName || ! defaultMetricType ) return query
566- changed = true
567- return { ...query , metricName : defaultMetricName , metricType : defaultMetricType }
558+ const appliedMetricDefaultRef = React . useRef ( false )
559+ if ( metricSelectionOptions . length > 0 && ! appliedMetricDefaultRef . current ) {
560+ const [ defaultMetricName , defaultMetricTypeRaw ] = metricSelectionOptions [ 0 ] . value . split ( "::" )
561+ const defaultMetricType = defaultMetricTypeRaw as QueryBuilderMetricType
562+ const needsDefault = state . queries . some (
563+ ( query ) => query . dataSource === "metrics" && ! query . metricName && defaultMetricName && defaultMetricType ,
564+ )
565+ if ( needsDefault ) {
566+ appliedMetricDefaultRef . current = true
567+ setState ( ( current ) => {
568+ let changed = false
569+ const queries = current . queries . map ( ( query ) => {
570+ if ( query . dataSource !== "metrics" || query . metricName || ! defaultMetricName || ! defaultMetricType ) return query
571+ changed = true
572+ return { ...query , metricName : defaultMetricName , metricType : defaultMetricType }
573+ } )
574+ return changed ? { ...current , queries } : current
568575 } )
569- return changed ? { ...current , queries } : current
570- } )
571- } , [ metricSelectionOptions ] )
576+ }
577+ }
572578
573579 const seriesFieldOptions = React . useMemo ( ( ) => toSeriesFieldOptions ( state ) , [ state ] )
574580
575- React . useEffect ( ( ) => {
576- if ( state . visualization !== "stat" || seriesFieldOptions . length === 0 ) return
577- if ( state . statValueField && seriesFieldOptions . includes ( state . statValueField ) ) return
578- setState ( ( current ) => {
579- if ( current . statValueField && seriesFieldOptions . includes ( current . statValueField ) ) return current
580- return { ...current , statValueField : seriesFieldOptions [ 0 ] }
581- } )
582- } , [ widget , state , seriesFieldOptions ] )
581+ const effectiveStatValueField =
582+ state . visualization === "stat" &&
583+ seriesFieldOptions . length > 0 &&
584+ ( ! state . statValueField || ! seriesFieldOptions . includes ( state . statValueField ) )
585+ ? seriesFieldOptions [ 0 ]
586+ : state . statValueField
583587
584588 const previewWidget = React . useMemo ( ( ) => {
585589 const previewState = stagedState ?? state
@@ -754,7 +758,7 @@ export function WidgetQueryBuilderPage({
754758 includePercentChange = { state . includePercentChange }
755759 debug = { state . debug }
756760 statAggregate = { state . statAggregate }
757- statValueField = { state . statValueField }
761+ statValueField = { effectiveStatValueField }
758762 unit = { state . unit }
759763 tableLimit = { state . tableLimit }
760764 seriesFieldOptions = { seriesFieldOptions }
0 commit comments