@@ -79,17 +79,25 @@ export const loadReduxState = async (services: ExploreServices): Promise<RootSta
7979 type : queryState . dataset . type ,
8080 timeFieldName : queryState . dataset . timeFieldName ,
8181 dataSource : queryState . dataset . dataSource ,
82+ signalType : queryState . dataset . signalType ,
8283 } ;
8384 }
8485
8586 // Always call getPreloadedQueryState to ensure SignalType validation runs
8687 const resolvedQueryState = await getPreloadedQueryState ( services , urlDataset ) ;
8788
8889 // Use the resolved dataset but preserve other query state from URL if available
90+ // When the dataset changes (due to signal type filtering), also update the language
91+ const datasetChanged =
92+ queryState ?. dataset ?. id !== resolvedQueryState . dataset ?. id ||
93+ queryState ?. dataset ?. type !== resolvedQueryState . dataset ?. type ;
94+
8995 const finalQueryState : QueryState = queryState
9096 ? {
9197 ...queryState ,
9298 dataset : resolvedQueryState . dataset ,
99+ language : datasetChanged ? resolvedQueryState . language : queryState . language ,
100+ query : datasetChanged ? '' : queryState . query ,
93101 }
94102 : resolvedQueryState ;
95103 services . data . query . queryString . setQuery ( finalQueryState ) ;
@@ -184,15 +192,21 @@ const fetchFirstAvailableDataset = async (
184192 dataset . type !== DEFAULT_DATA . SET_TYPES . INDEX_PATTERN
185193 ) ;
186194
195+ // Get effective signal type from dataView or dataset (for Prometheus which sets signalType directly)
196+ const effectiveSignalType = dataView ?. signalType || dataset . signalType ;
197+
187198 // If requiredSignalType is specified, dataset must match it
188199 if ( requiredSignalType ) {
189- if ( dataView ?. signalType === requiredSignalType ) {
200+ if ( effectiveSignalType === requiredSignalType ) {
190201 return dataset ;
191202 }
192203 } else {
193- // If requiredSignalType is not specified (i.e., not Traces),
194- // dataset should not have signalType equal to Traces
195- if ( dataView ?. signalType !== CORE_SIGNAL_TYPES . TRACES ) {
204+ // If requiredSignalType is not specified (i.e., Logs flavor),
205+ // dataset should not have signalType equal to Traces or Metrics
206+ if (
207+ effectiveSignalType !== CORE_SIGNAL_TYPES . TRACES &&
208+ effectiveSignalType !== CORE_SIGNAL_TYPES . METRICS
209+ ) {
196210 return dataset ;
197211 }
198212 }
@@ -220,7 +234,11 @@ const resolveDataset = async (
220234 const currentAppId = await getCurrentAppId ( services ) ;
221235 const flavorFromAppId = getFlavorFromAppId ( currentAppId ) ;
222236 const requiredSignalType =
223- flavorFromAppId === ExploreFlavor . Traces ? CORE_SIGNAL_TYPES . TRACES : undefined ;
237+ flavorFromAppId === ExploreFlavor . Traces
238+ ? CORE_SIGNAL_TYPES . TRACES
239+ : flavorFromAppId === ExploreFlavor . Metrics
240+ ? CORE_SIGNAL_TYPES . METRICS
241+ : undefined ;
224242
225243 // Get existing dataset from QueryStringManager or use preferred dataset
226244 const queryStringQuery = services . data ?. query ?. queryString ?. getQuery ( ) ;
@@ -235,15 +253,21 @@ const resolveDataset = async (
235253 existingDataset . type !== DEFAULT_DATA . SET_TYPES . INDEX_PATTERN
236254 ) ;
237255
256+ // Get effective signal type from dataView or preferredDataset (for Prometheus which sets signalType directly)
257+ const effectiveSignalType = dataView ?. signalType || preferredDataset ?. signalType ;
258+
238259 // If requiredSignalType is specified, dataset must match it
239260 if ( requiredSignalType ) {
240- if ( dataView ?. signalType === requiredSignalType ) {
261+ if ( effectiveSignalType === requiredSignalType ) {
241262 return existingDataset ;
242263 }
243264 } else {
244- // If requiredSignalType is not specified (i.e., not Traces),
245- // dataset should not have signalType equal to Traces
246- if ( dataView ?. signalType !== CORE_SIGNAL_TYPES . TRACES ) {
265+ // If requiredSignalType is not specified (i.e., Logs flavor),
266+ // dataset should not have signalType equal to Traces or Metrics
267+ if (
268+ effectiveSignalType !== CORE_SIGNAL_TYPES . TRACES &&
269+ effectiveSignalType !== CORE_SIGNAL_TYPES . METRICS
270+ ) {
247271 return existingDataset ;
248272 }
249273 }
@@ -280,6 +304,7 @@ const getPreloadedQueryState = async (
280304 type : selectedDataset . type ,
281305 timeFieldName : selectedDataset . timeFieldName ,
282306 dataSource : selectedDataset . dataSource ,
307+ signalType : selectedDataset . signalType ,
283308 } ;
284309 }
285310 }
0 commit comments