@grafana/scenes 4.5.0 → 4.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,15 @@
1
+ # v4.5.1 (Fri Apr 05 2024)
2
+
3
+ #### 🐛 Bug Fix
4
+
5
+ - Chore: Bump typescript version [#657](https://github.com/grafana/scenes/pull/657) ([@kaydelaney](https://github.com/kaydelaney))
6
+
7
+ #### Authors: 1
8
+
9
+ - kay delaney ([@kaydelaney](https://github.com/kaydelaney))
10
+
11
+ ---
12
+
1
13
  # v4.5.0 (Fri Apr 05 2024)
2
14
 
3
15
  #### 🚀 Enhancement
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sources":["../../../../src/components/SceneApp/utils.ts"],"sourcesContent":["import React from 'react';\nimport { RouteComponentProps, useLocation } from 'react-router-dom';\nimport { UrlQueryMap, locationUtil, urlUtil } from '@grafana/data';\nimport { locationSearchToObject, locationService } from '@grafana/runtime';\nimport { SceneObject } from '../../core/types';\n\nexport function useAppQueryParams(): UrlQueryMap {\n const location = useLocation();\n return locationSearchToObject(location.search || '');\n}\n\n/**\n *\n * @param path Url to append query params to\n * @param preserveParams Query params to preserve\n * @returns Url with query params\n */\nexport function getUrlWithAppState(path: string, preserveParams?: string[]): string {\n // make a copy of params as the renderUrl function mutates the object\n const paramsCopy = { ...locationService.getSearchObject() };\n\n if (preserveParams) {\n for (const key of Object.keys(paramsCopy)) {\n // if param is not in preserveParams, remove it\n if (!preserveParams.includes(key)) {\n delete paramsCopy[key];\n }\n }\n }\n\n return urlUtil.renderUrl(locationUtil.assureBaseUrl(path), paramsCopy);\n}\n\nexport function renderSceneComponentWithRouteProps(sceneObject: SceneObject, routeProps: RouteComponentProps) {\n return React.createElement(sceneObject.Component, { model: sceneObject, routeProps: routeProps });\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAMO,SAAS,iBAAiC,GAAA;AAC/C,EAAA,MAAM,WAAW,WAAY,EAAA,CAAA;AAC7B,EAAO,OAAA,sBAAA,CAAuB,QAAS,CAAA,MAAA,IAAU,EAAE,CAAA,CAAA;AACrD,CAAA;AAQgB,SAAA,kBAAA,CAAmB,MAAc,cAAmC,EAAA;AAElF,EAAM,MAAA,UAAA,GAAa,cAAK,CAAA,EAAA,EAAA,eAAA,CAAgB,eAAgB,EAAA,CAAA,CAAA;AAExD,EAAA,IAAI,cAAgB,EAAA;AAClB,IAAA,KAAA,MAAW,GAAO,IAAA,MAAA,CAAO,IAAK,CAAA,UAAU,CAAG,EAAA;AAEzC,MAAA,IAAI,CAAC,cAAA,CAAe,QAAS,CAAA,GAAG,CAAG,EAAA;AACjC,QAAA,OAAO,UAAW,CAAA,GAAA,CAAA,CAAA;AAAA,OACpB;AAAA,KACF;AAAA,GACF;AAEA,EAAA,OAAO,QAAQ,SAAU,CAAA,YAAA,CAAa,aAAc,CAAA,IAAI,GAAG,UAAU,CAAA,CAAA;AACvE,CAAA;AAEgB,SAAA,kCAAA,CAAmC,aAA0B,UAAiC,EAAA;AAC5G,EAAO,OAAA,KAAA,CAAM,cAAc,WAAY,CAAA,SAAA,EAAW,EAAE,KAAO,EAAA,WAAA,EAAa,YAAwB,CAAA,CAAA;AAClG;;;;"}
1
+ {"version":3,"file":"utils.js","sources":["../../../../src/components/SceneApp/utils.ts"],"sourcesContent":["import React from 'react';\nimport { RouteComponentProps, useLocation } from 'react-router-dom';\nimport { UrlQueryMap, locationUtil, urlUtil } from '@grafana/data';\nimport { locationSearchToObject, locationService } from '@grafana/runtime';\nimport { SceneObject } from '../../core/types';\n\nexport function useAppQueryParams(): UrlQueryMap {\n const location = useLocation();\n return locationSearchToObject(location.search || '');\n}\n\n/**\n *\n * @param path Url to append query params to\n * @param preserveParams Query params to preserve\n * @returns Url with query params\n */\nexport function getUrlWithAppState(path: string, preserveParams?: string[]): string {\n // make a copy of params as the renderUrl function mutates the object\n const paramsCopy = { ...locationService.getSearchObject() };\n\n if (preserveParams) {\n for (const key of Object.keys(paramsCopy)) {\n // if param is not in preserveParams, remove it\n if (!preserveParams.includes(key)) {\n delete paramsCopy[key];\n }\n }\n }\n\n return urlUtil.renderUrl(locationUtil.assureBaseUrl(path), paramsCopy);\n}\n\nexport function renderSceneComponentWithRouteProps(sceneObject: SceneObject, routeProps: RouteComponentProps) {\n // @ts-ignore\n return React.createElement(sceneObject.Component, { model: sceneObject, routeProps: routeProps });\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAMO,SAAS,iBAAiC,GAAA;AAC/C,EAAA,MAAM,WAAW,WAAY,EAAA,CAAA;AAC7B,EAAO,OAAA,sBAAA,CAAuB,QAAS,CAAA,MAAA,IAAU,EAAE,CAAA,CAAA;AACrD,CAAA;AAQgB,SAAA,kBAAA,CAAmB,MAAc,cAAmC,EAAA;AAElF,EAAM,MAAA,UAAA,GAAa,cAAK,CAAA,EAAA,EAAA,eAAA,CAAgB,eAAgB,EAAA,CAAA,CAAA;AAExD,EAAA,IAAI,cAAgB,EAAA;AAClB,IAAA,KAAA,MAAW,GAAO,IAAA,MAAA,CAAO,IAAK,CAAA,UAAU,CAAG,EAAA;AAEzC,MAAA,IAAI,CAAC,cAAA,CAAe,QAAS,CAAA,GAAG,CAAG,EAAA;AACjC,QAAA,OAAO,UAAW,CAAA,GAAA,CAAA,CAAA;AAAA,OACpB;AAAA,KACF;AAAA,GACF;AAEA,EAAA,OAAO,QAAQ,SAAU,CAAA,YAAA,CAAa,aAAc,CAAA,IAAI,GAAG,UAAU,CAAA,CAAA;AACvE,CAAA;AAEgB,SAAA,kCAAA,CAAmC,aAA0B,UAAiC,EAAA;AAE5G,EAAO,OAAA,KAAA,CAAM,cAAc,WAAY,CAAA,SAAA,EAAW,EAAE,KAAO,EAAA,WAAA,EAAa,YAAwB,CAAA,CAAA;AAClG;;;;"}
@@ -128,7 +128,7 @@ function getQueryController(sceneObject) {
128
128
  }
129
129
  parent = parent.parent;
130
130
  }
131
- return parent;
131
+ return void 0;
132
132
  }
133
133
 
134
134
  export { findAllObjects, findObject, getAncestor, getData, getDataLayers, getLayout, getQueryController, getVariables, hasVariableDependencyInLoadingState, interpolate };
@@ -1 +1 @@
1
- {"version":3,"file":"sceneGraph.js","sources":["../../../../src/core/sceneGraph/sceneGraph.ts"],"sourcesContent":["import { ScopedVars } from '@grafana/data';\nimport { EmptyDataNode, EmptyVariableSet } from '../../variables/interpolation/defaults';\n\nimport { sceneInterpolator } from '../../variables/interpolation/sceneInterpolator';\nimport { VariableCustomFormatterFn, SceneVariables } from '../../variables/types';\n\nimport { isDataLayer, SceneDataLayerProvider, SceneDataProvider, SceneLayout, SceneObject } from '../types';\nimport { lookupVariable } from '../../variables/lookupVariable';\nimport { getClosest } from './utils';\nimport { SceneQueryControllerLike, isQueryController } from '../../behaviors/SceneQueryController';\n\n/**\n * Get the closest node with variables\n */\nexport function getVariables(sceneObject: SceneObject): SceneVariables {\n return getClosest(sceneObject, (s) => s.state.$variables) ?? EmptyVariableSet;\n}\n\n/**\n * Will walk up the scene object graph to the closest $data scene object\n */\nexport function getData(sceneObject: SceneObject): SceneDataProvider {\n return getClosest(sceneObject, (s) => s.state.$data) ?? EmptyDataNode;\n}\n\nfunction isSceneLayout(s: SceneObject): s is SceneLayout {\n return 'isDraggable' in s;\n}\n\n/**\n * Will walk up the scene object graph to the closest $layout scene object\n */\nexport function getLayout(scene: SceneObject): SceneLayout | null {\n const parent = getClosest(scene, (s) => (isSceneLayout(s) ? s : undefined));\n if (parent) {\n return parent;\n }\n\n return null;\n}\n\n/**\n * Interpolates the given string using the current scene object as context. *\n */\nexport function interpolate(\n sceneObject: SceneObject,\n value: string | undefined | null,\n scopedVars?: ScopedVars,\n format?: string | VariableCustomFormatterFn\n): string {\n if (value === '' || value == null) {\n return '';\n }\n\n return sceneInterpolator(sceneObject, value, scopedVars, format);\n}\n\n/**\n * Checks if the variable is currently loading or waiting to update.\n * It also returns true if a dependency of the variable is loading.\n *\n * For example if C depends on variable B which depends on variable A and A is loading this returns true for variable C and B.\n */\nexport function hasVariableDependencyInLoadingState(sceneObject: SceneObject) {\n if (!sceneObject.variableDependency) {\n return false;\n }\n\n for (const name of sceneObject.variableDependency.getNames()) {\n const variable = lookupVariable(name, sceneObject);\n if (!variable) {\n continue;\n }\n\n const set = variable.parent as SceneVariables;\n if (set.isVariableLoadingOrWaitingToUpdate(variable)) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction findObjectInternal(\n scene: SceneObject,\n check: (obj: SceneObject) => boolean,\n alreadySearchedChild?: SceneObject,\n shouldSearchUp?: boolean\n): SceneObject | null {\n if (check(scene)) {\n return scene;\n }\n\n let found: SceneObject | null = null;\n\n scene.forEachChild((child) => {\n if (child === alreadySearchedChild) {\n return;\n }\n\n let maybe = findObjectInternal(child, check);\n if (maybe) {\n found = maybe;\n }\n });\n\n if (found) {\n return found;\n }\n\n if (shouldSearchUp && scene.parent) {\n return findObjectInternal(scene.parent, check, scene, true);\n }\n\n return null;\n}\n\n/**\n * This will search the full scene graph, starting with the scene node passed in, then walking up the parent chain. *\n */\nexport function findObject(scene: SceneObject, check: (obj: SceneObject) => boolean): SceneObject | null {\n return findObjectInternal(scene, check, undefined, true);\n}\n\n/**\n * This will search down the full scene graph, looking for objects that match the provided predicate.\n */\nexport function findAllObjects(scene: SceneObject, check: (obj: SceneObject) => boolean): SceneObject[] {\n const found: SceneObject[] = [];\n\n scene.forEachChild((child) => {\n if (check(child)) {\n found.push(child);\n }\n\n found.push(...findAllObjects(child, check));\n });\n\n return found;\n}\n\n/**\n * Will walk up the scene object graph up until the root and collect all SceneDataLayerProvider objects.\n * When localOnly set to true, it will only collect the closest layers.\n */\nexport function getDataLayers(sceneObject: SceneObject, localOnly = false): SceneDataLayerProvider[] {\n let currentLevel: SceneObject | undefined = sceneObject;\n let collected: SceneDataLayerProvider[] = [];\n\n while (currentLevel) {\n const dataProvider = currentLevel.state.$data;\n if (!dataProvider) {\n currentLevel = currentLevel.parent;\n continue;\n }\n\n // Check if data layer exists nested inside another data provider\n if (isDataLayer(dataProvider)) {\n collected = collected.concat(dataProvider);\n } else {\n if (dataProvider.state.$data && isDataLayer(dataProvider.state.$data)) {\n collected = collected.concat(dataProvider.state.$data);\n }\n }\n\n if (localOnly && collected.length > 0) {\n break;\n }\n\n currentLevel = currentLevel.parent;\n }\n\n return collected;\n}\n\n/**\n * A utility function to find the closest ancestor of a given type. This function expects\n * to find it and will throw an error if it does not.\n */\nexport function getAncestor<ParentType>(\n sceneObject: SceneObject,\n ancestorType: { new (...args: never[]): ParentType }\n): ParentType {\n let parent: SceneObject | undefined = sceneObject;\n\n while (parent) {\n if (parent instanceof ancestorType) {\n return parent;\n }\n parent = parent.parent;\n }\n\n if (!parent) {\n throw new Error('Unable to find parent of type ' + ancestorType.name);\n }\n\n return parent;\n}\n\n/**\n * Returns the closest query controller undefined if none found\n */\nexport function getQueryController(sceneObject: SceneObject): SceneQueryControllerLike | undefined {\n let parent: SceneObject | undefined = sceneObject;\n\n while (parent) {\n if (parent.state.$behaviors) {\n for (const behavior of parent.state.$behaviors) {\n if (isQueryController(behavior)) {\n return behavior;\n }\n }\n }\n parent = parent.parent;\n }\n\n return parent;\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sceneGraph.js","sources":["../../../../src/core/sceneGraph/sceneGraph.ts"],"sourcesContent":["import { ScopedVars } from '@grafana/data';\nimport { EmptyDataNode, EmptyVariableSet } from '../../variables/interpolation/defaults';\n\nimport { sceneInterpolator } from '../../variables/interpolation/sceneInterpolator';\nimport { VariableCustomFormatterFn, SceneVariables } from '../../variables/types';\n\nimport { isDataLayer, SceneDataLayerProvider, SceneDataProvider, SceneLayout, SceneObject } from '../types';\nimport { lookupVariable } from '../../variables/lookupVariable';\nimport { getClosest } from './utils';\nimport { SceneQueryControllerLike, isQueryController } from '../../behaviors/SceneQueryController';\n\n/**\n * Get the closest node with variables\n */\nexport function getVariables(sceneObject: SceneObject): SceneVariables {\n return getClosest(sceneObject, (s) => s.state.$variables) ?? EmptyVariableSet;\n}\n\n/**\n * Will walk up the scene object graph to the closest $data scene object\n */\nexport function getData(sceneObject: SceneObject): SceneDataProvider {\n return getClosest(sceneObject, (s) => s.state.$data) ?? EmptyDataNode;\n}\n\nfunction isSceneLayout(s: SceneObject): s is SceneLayout {\n return 'isDraggable' in s;\n}\n\n/**\n * Will walk up the scene object graph to the closest $layout scene object\n */\nexport function getLayout(scene: SceneObject): SceneLayout | null {\n const parent = getClosest(scene, (s) => (isSceneLayout(s) ? s : undefined));\n if (parent) {\n return parent;\n }\n\n return null;\n}\n\n/**\n * Interpolates the given string using the current scene object as context. *\n */\nexport function interpolate(\n sceneObject: SceneObject,\n value: string | undefined | null,\n scopedVars?: ScopedVars,\n format?: string | VariableCustomFormatterFn\n): string {\n if (value === '' || value == null) {\n return '';\n }\n\n return sceneInterpolator(sceneObject, value, scopedVars, format);\n}\n\n/**\n * Checks if the variable is currently loading or waiting to update.\n * It also returns true if a dependency of the variable is loading.\n *\n * For example if C depends on variable B which depends on variable A and A is loading this returns true for variable C and B.\n */\nexport function hasVariableDependencyInLoadingState(sceneObject: SceneObject) {\n if (!sceneObject.variableDependency) {\n return false;\n }\n\n for (const name of sceneObject.variableDependency.getNames()) {\n const variable = lookupVariable(name, sceneObject);\n if (!variable) {\n continue;\n }\n\n const set = variable.parent as SceneVariables;\n if (set.isVariableLoadingOrWaitingToUpdate(variable)) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction findObjectInternal(\n scene: SceneObject,\n check: (obj: SceneObject) => boolean,\n alreadySearchedChild?: SceneObject,\n shouldSearchUp?: boolean\n): SceneObject | null {\n if (check(scene)) {\n return scene;\n }\n\n let found: SceneObject | null = null;\n\n scene.forEachChild((child) => {\n if (child === alreadySearchedChild) {\n return;\n }\n\n let maybe = findObjectInternal(child, check);\n if (maybe) {\n found = maybe;\n }\n });\n\n if (found) {\n return found;\n }\n\n if (shouldSearchUp && scene.parent) {\n return findObjectInternal(scene.parent, check, scene, true);\n }\n\n return null;\n}\n\n/**\n * This will search the full scene graph, starting with the scene node passed in, then walking up the parent chain. *\n */\nexport function findObject(scene: SceneObject, check: (obj: SceneObject) => boolean): SceneObject | null {\n return findObjectInternal(scene, check, undefined, true);\n}\n\n/**\n * This will search down the full scene graph, looking for objects that match the provided predicate.\n */\nexport function findAllObjects(scene: SceneObject, check: (obj: SceneObject) => boolean): SceneObject[] {\n const found: SceneObject[] = [];\n\n scene.forEachChild((child) => {\n if (check(child)) {\n found.push(child);\n }\n\n found.push(...findAllObjects(child, check));\n });\n\n return found;\n}\n\n/**\n * Will walk up the scene object graph up until the root and collect all SceneDataLayerProvider objects.\n * When localOnly set to true, it will only collect the closest layers.\n */\nexport function getDataLayers(sceneObject: SceneObject, localOnly = false): SceneDataLayerProvider[] {\n let currentLevel: SceneObject | undefined = sceneObject;\n let collected: SceneDataLayerProvider[] = [];\n\n while (currentLevel) {\n const dataProvider = currentLevel.state.$data;\n if (!dataProvider) {\n currentLevel = currentLevel.parent;\n continue;\n }\n\n // Check if data layer exists nested inside another data provider\n if (isDataLayer(dataProvider)) {\n collected = collected.concat(dataProvider);\n } else {\n if (dataProvider.state.$data && isDataLayer(dataProvider.state.$data)) {\n collected = collected.concat(dataProvider.state.$data);\n }\n }\n\n if (localOnly && collected.length > 0) {\n break;\n }\n\n currentLevel = currentLevel.parent;\n }\n\n return collected;\n}\n\n/**\n * A utility function to find the closest ancestor of a given type. This function expects\n * to find it and will throw an error if it does not.\n */\nexport function getAncestor<ParentType>(\n sceneObject: SceneObject,\n ancestorType: { new (...args: never[]): ParentType }\n): ParentType {\n let parent: SceneObject | undefined = sceneObject;\n\n while (parent) {\n if (parent instanceof ancestorType) {\n return parent;\n }\n parent = parent.parent;\n }\n\n if (!parent) {\n throw new Error('Unable to find parent of type ' + ancestorType.name);\n }\n\n return parent as ParentType;\n}\n\n/**\n * Returns the closest query controller undefined if none found\n */\nexport function getQueryController(sceneObject: SceneObject): SceneQueryControllerLike | undefined {\n let parent: SceneObject | undefined = sceneObject;\n\n while (parent) {\n if (parent.state.$behaviors) {\n for (const behavior of parent.state.$behaviors) {\n if (isQueryController(behavior)) {\n return behavior;\n }\n }\n }\n parent = parent.parent;\n }\n\n return undefined;\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"GroupByVariable.js","sources":["../../../../src/variables/groupby/GroupByVariable.tsx"],"sourcesContent":["import { AdHocVariableFilter, DataSourceApi, MetricFindValue } from '@grafana/data';\nimport { allActiveGroupByVariables } from './findActiveGroupByVariablesByUid';\nimport { DataSourceRef, VariableType } from '@grafana/schema';\nimport { SceneComponentProps, ControlsLayout } from '../../core/types';\nimport { DataQueryExtended, SceneQueryRunner } from '../../querying/SceneQueryRunner';\nimport { sceneGraph } from '../../core/sceneGraph';\nimport { ValidateAndUpdateResult, VariableValueOption } from '../types';\nimport { MultiValueVariable, MultiValueVariableState, VariableGetOptionsArgs } from '../variants/MultiValueVariable';\nimport { from, map, mergeMap, Observable, of, take } from 'rxjs';\nimport { getDataSource } from '../../utils/getDataSource';\nimport { renderSelectForVariable } from '../components/VariableValueSelect';\n\nexport interface GroupByVariableState extends MultiValueVariableState {\n /** Defaults to \"Group\" */\n name: string;\n /** The visible keys to group on */\n // TODO review this type and name (naming is hard)\n defaultOptions?: MetricFindValue[];\n /** Base filters to always apply when looking up keys */\n baseFilters?: AdHocVariableFilter[];\n /** Datasource to use for getTagKeys and also controls which scene queries the group by should apply to */\n datasource: DataSourceRef | null;\n /** Controls if the group by can be changed */\n readOnly?: boolean;\n /**\n * @experimental\n * Controls the layout and design of the label.\n * Vertical layout does not yet support operator selector.\n */\n layout?: ControlsLayout;\n /**\n * Defaults to same-datasource which means group by will automatically be applied to all queries with the same data source as this GroupBySet.\n * In manual mode no queries are re-run on changes, and you have to manually apply the filter to whatever queries you want.\n */\n applyMode?: 'auto' | 'manual';\n /**\n * Filter out the keys that do not match the regex.\n */\n tagKeyRegexFilter?: RegExp;\n /**\n * Extension hook for customizing the key lookup.\n * Return replace: true if you want to override the default lookup\n * Return replace: false if you want to combine the results with the default lookup\n */\n getTagKeysProvider?: getTagKeysProvider;\n}\n\nexport type getTagKeysProvider = (\n set: GroupByVariable,\n currentKey: string | null\n) => Promise<{ replace?: boolean; values: MetricFindValue[] }>;\n\nexport class GroupByVariable extends MultiValueVariable<GroupByVariableState> {\n static Component = GroupByVariableRenderer;\n\n public validateAndUpdate(): Observable<ValidateAndUpdateResult> {\n return this.getValueOptions({}).pipe(\n map((options) => {\n this._updateValueGivenNewOptions(options);\n return {};\n })\n );\n }\n\n private _updateValueGivenNewOptions(options: VariableValueOption[]) {\n const { value: currentValue, text: currentText } = this.state;\n\n const stateUpdate: Partial<MultiValueVariableState> = {\n options,\n loading: false,\n value: currentValue ?? [],\n text: currentText ?? [],\n };\n\n this.setState(stateUpdate);\n }\n\n public getValueOptions(args: VariableGetOptionsArgs): Observable<VariableValueOption[]> {\n // When default dimensions are provided, return the static list\n if (this.state.defaultOptions) {\n return of(\n this.state.defaultOptions.map((o) => ({\n label: o.text,\n value: String(o.value),\n }))\n );\n }\n\n this.setState({ loading: true, error: null });\n\n return from(\n getDataSource(this.state.datasource, {\n __sceneObject: { text: '__sceneObject', value: this },\n })\n ).pipe(\n mergeMap((ds) => {\n return from(this._getKeys(ds)).pipe(\n take(1),\n mergeMap((data: MetricFindValue[]) => {\n const a: VariableValueOption[] = data.map((i) => {\n return {\n label: i.text,\n value: i.value ? String(i.value) : i.text,\n };\n });\n return of(a);\n })\n );\n })\n );\n }\n\n public constructor(initialState: Partial<GroupByVariableState>) {\n super({\n isMulti: true,\n name: '',\n value: [],\n text: [],\n options: [],\n datasource: null,\n baseFilters: [],\n applyMode: 'auto',\n layout: 'horizontal',\n type: 'groupby' as VariableType,\n ...initialState,\n noValueOnClear: true,\n });\n\n this.addActivationHandler(() => {\n allActiveGroupByVariables.add(this);\n\n return () => allActiveGroupByVariables.delete(this);\n });\n }\n\n /**\n * Get possible keys given current filters. Do not call from plugins directly\n */\n public _getKeys = async (ds: DataSourceApi) => {\n // TODO: provide current dimensions?\n const override = await this.state.getTagKeysProvider?.(this, null);\n\n if (override && override.replace) {\n return override.values;\n }\n\n if (this.state.defaultOptions) {\n return this.state.defaultOptions.concat(override?.values ?? []);\n }\n\n if (!ds.getTagKeys) {\n return [];\n }\n\n const queries = this._getSceneQueries();\n const otherFilters = this.state.baseFilters || [];\n const timeRange = sceneGraph.getTimeRange(this).state.value;\n // @ts-expect-error TODO: remove this once 10.4.0 is released\n let keys = await ds.getTagKeys({ filters: otherFilters, queries, timeRange });\n\n if (override) {\n keys = keys.concat(override.values);\n }\n\n const tagKeyRegexFilter = this.state.tagKeyRegexFilter;\n if (tagKeyRegexFilter) {\n keys = keys.filter((f) => f.text.match(tagKeyRegexFilter));\n }\n\n return keys;\n };\n\n /**\n * Allows clearing the value of the variable to an empty value. Overrides default behavior of a MultiValueVariable\n */\n public getDefaultMultiState(options: VariableValueOption[]) {\n return { value: [], text: [] };\n }\n\n /**\n * Get all queries in the scene that have the same datasource as this AggregationsSet\n */\n private _getSceneQueries(): DataQueryExtended[] {\n const runners = sceneGraph.findAllObjects(\n this.getRoot(),\n (o) => o instanceof SceneQueryRunner\n ) as SceneQueryRunner[];\n\n const applicableRunners = runners.filter((r) => r.state.datasource?.uid === this.state.datasource?.uid);\n\n if (applicableRunners.length === 0) {\n return [];\n }\n\n const result: DataQueryExtended[] = [];\n applicableRunners.forEach((r) => {\n result.push(...r.state.queries);\n });\n\n return result;\n }\n}\n\nexport function GroupByVariableRenderer({ model }: SceneComponentProps<MultiValueVariable>) {\n return renderSelectForVariable(model);\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GroupByVariable.js","sources":["../../../../src/variables/groupby/GroupByVariable.tsx"],"sourcesContent":["import { AdHocVariableFilter, DataSourceApi, MetricFindValue } from '@grafana/data';\nimport { allActiveGroupByVariables } from './findActiveGroupByVariablesByUid';\nimport { DataSourceRef, VariableType } from '@grafana/schema';\nimport { SceneComponentProps, ControlsLayout } from '../../core/types';\nimport { DataQueryExtended, SceneQueryRunner } from '../../querying/SceneQueryRunner';\nimport { sceneGraph } from '../../core/sceneGraph';\nimport { ValidateAndUpdateResult, VariableValueOption, VariableValueSingle } from '../types';\nimport { MultiValueVariable, MultiValueVariableState, VariableGetOptionsArgs } from '../variants/MultiValueVariable';\nimport { from, map, mergeMap, Observable, of, take } from 'rxjs';\nimport { getDataSource } from '../../utils/getDataSource';\nimport { renderSelectForVariable } from '../components/VariableValueSelect';\n\nexport interface GroupByVariableState extends MultiValueVariableState {\n /** Defaults to \"Group\" */\n name: string;\n /** The visible keys to group on */\n // TODO review this type and name (naming is hard)\n defaultOptions?: MetricFindValue[];\n /** Base filters to always apply when looking up keys */\n baseFilters?: AdHocVariableFilter[];\n /** Datasource to use for getTagKeys and also controls which scene queries the group by should apply to */\n datasource: DataSourceRef | null;\n /** Controls if the group by can be changed */\n readOnly?: boolean;\n /**\n * @experimental\n * Controls the layout and design of the label.\n * Vertical layout does not yet support operator selector.\n */\n layout?: ControlsLayout;\n /**\n * Defaults to same-datasource which means group by will automatically be applied to all queries with the same data source as this GroupBySet.\n * In manual mode no queries are re-run on changes, and you have to manually apply the filter to whatever queries you want.\n */\n applyMode?: 'auto' | 'manual';\n /**\n * Filter out the keys that do not match the regex.\n */\n tagKeyRegexFilter?: RegExp;\n /**\n * Extension hook for customizing the key lookup.\n * Return replace: true if you want to override the default lookup\n * Return replace: false if you want to combine the results with the default lookup\n */\n getTagKeysProvider?: getTagKeysProvider;\n}\n\nexport type getTagKeysProvider = (\n set: GroupByVariable,\n currentKey: string | null\n) => Promise<{ replace?: boolean; values: MetricFindValue[] }>;\n\nexport class GroupByVariable extends MultiValueVariable<GroupByVariableState> {\n static Component = GroupByVariableRenderer;\n\n public validateAndUpdate(): Observable<ValidateAndUpdateResult> {\n return this.getValueOptions({}).pipe(\n map((options) => {\n this._updateValueGivenNewOptions(options);\n return {};\n })\n );\n }\n\n private _updateValueGivenNewOptions(options: VariableValueOption[]) {\n const { value: currentValue, text: currentText } = this.state;\n\n const stateUpdate: Partial<MultiValueVariableState> = {\n options,\n loading: false,\n value: currentValue ?? [],\n text: currentText ?? [],\n };\n\n this.setState(stateUpdate);\n }\n\n public getValueOptions(args: VariableGetOptionsArgs): Observable<VariableValueOption[]> {\n // When default dimensions are provided, return the static list\n if (this.state.defaultOptions) {\n return of(\n this.state.defaultOptions.map((o) => ({\n label: o.text,\n value: String(o.value),\n }))\n );\n }\n\n this.setState({ loading: true, error: null });\n\n return from(\n getDataSource(this.state.datasource, {\n __sceneObject: { text: '__sceneObject', value: this },\n })\n ).pipe(\n mergeMap((ds) => {\n return from(this._getKeys(ds)).pipe(\n take(1),\n mergeMap((data: MetricFindValue[]) => {\n const a: VariableValueOption[] = data.map((i) => {\n return {\n label: i.text,\n value: i.value ? String(i.value) : i.text,\n };\n });\n return of(a);\n })\n );\n })\n );\n }\n\n public constructor(initialState: Partial<GroupByVariableState>) {\n super({\n isMulti: true,\n name: '',\n value: [],\n text: [],\n options: [],\n datasource: null,\n baseFilters: [],\n applyMode: 'auto',\n layout: 'horizontal',\n type: 'groupby' as VariableType,\n ...initialState,\n noValueOnClear: true,\n });\n\n this.addActivationHandler(() => {\n allActiveGroupByVariables.add(this);\n\n return () => allActiveGroupByVariables.delete(this);\n });\n }\n\n /**\n * Get possible keys given current filters. Do not call from plugins directly\n */\n public _getKeys = async (ds: DataSourceApi) => {\n // TODO: provide current dimensions?\n const override = await this.state.getTagKeysProvider?.(this, null);\n\n if (override && override.replace) {\n return override.values;\n }\n\n if (this.state.defaultOptions) {\n return this.state.defaultOptions.concat(override?.values ?? []);\n }\n\n if (!ds.getTagKeys) {\n return [];\n }\n\n const queries = this._getSceneQueries();\n const otherFilters = this.state.baseFilters || [];\n const timeRange = sceneGraph.getTimeRange(this).state.value;\n // @ts-expect-error TODO: remove this once 10.4.0 is released\n let keys = await ds.getTagKeys({ filters: otherFilters, queries, timeRange });\n\n if (override) {\n keys = keys.concat(override.values);\n }\n\n const tagKeyRegexFilter = this.state.tagKeyRegexFilter;\n if (tagKeyRegexFilter) {\n keys = keys.filter((f) => f.text.match(tagKeyRegexFilter));\n }\n\n return keys;\n };\n\n /**\n * Allows clearing the value of the variable to an empty value. Overrides default behavior of a MultiValueVariable\n */\n public getDefaultMultiState(options: VariableValueOption[]): { value: VariableValueSingle[]; text: string[] } {\n return { value: [], text: [] };\n }\n\n /**\n * Get all queries in the scene that have the same datasource as this AggregationsSet\n */\n private _getSceneQueries(): DataQueryExtended[] {\n const runners = sceneGraph.findAllObjects(\n this.getRoot(),\n (o) => o instanceof SceneQueryRunner\n ) as SceneQueryRunner[];\n\n const applicableRunners = runners.filter((r) => r.state.datasource?.uid === this.state.datasource?.uid);\n\n if (applicableRunners.length === 0) {\n return [];\n }\n\n const result: DataQueryExtended[] = [];\n applicableRunners.forEach((r) => {\n result.push(...r.state.queries);\n });\n\n return result;\n }\n}\n\nexport function GroupByVariableRenderer({ model }: SceneComponentProps<MultiValueVariable>) {\n return renderSelectForVariable(model);\n}\n"],"names":[],"mappings":"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"}
@@ -114,8 +114,9 @@ function createQueryVariableRunnerFactory(datasource) {
114
114
  }
115
115
  let createQueryVariableRunner = createQueryVariableRunnerFactory;
116
116
  function ensureVariableQueryModelIsADataQuery(variable) {
117
- const query = variable.state.query;
118
- if (!query || typeof query !== "object") {
117
+ var _a;
118
+ const query = (_a = variable.state.query) != null ? _a : "";
119
+ if (typeof query === "string") {
119
120
  return { query, refId: `variable-${variable.state.name}` };
120
121
  }
121
122
  if (query.refId == null) {
@@ -1 +1 @@
1
- {"version":3,"file":"createQueryVariableRunner.js","sources":["../../../../../src/variables/variants/query/createQueryVariableRunner.ts"],"sourcesContent":["import { from, mergeMap, Observable, of } from 'rxjs';\n\nimport {\n DataQueryRequest,\n DataSourceApi,\n getDefaultTimeRange,\n LoadingState,\n PanelData,\n StandardVariableQuery,\n} from '@grafana/data';\nimport { getRunRequest } from '@grafana/runtime';\n\nimport { hasCustomVariableSupport, hasLegacyVariableSupport, hasStandardVariableSupport } from './guards';\n\nimport { QueryVariable } from './QueryVariable';\nimport { DataQuery } from '@grafana/schema';\n\nexport interface RunnerArgs {\n searchFilter?: string;\n variable: QueryVariable;\n}\n\nexport interface QueryRunner {\n getTarget: (variable: QueryVariable) => DataQuery | string;\n runRequest: (args: RunnerArgs, request: DataQueryRequest) => Observable<PanelData>;\n}\n\nclass StandardQueryRunner implements QueryRunner {\n public constructor(private datasource: DataSourceApi, private _runRequest = getRunRequest()) {}\n\n public getTarget(variable: QueryVariable) {\n if (hasStandardVariableSupport(this.datasource)) {\n return this.datasource.variables.toDataQuery(ensureVariableQueryModelIsADataQuery(variable));\n }\n\n throw new Error(\"Couldn't create a target with supplied arguments.\");\n }\n\n public runRequest(_: RunnerArgs, request: DataQueryRequest) {\n if (!hasStandardVariableSupport(this.datasource)) {\n return getEmptyMetricFindValueObservable();\n }\n\n if (!this.datasource.variables.query) {\n return this._runRequest(this.datasource, request);\n }\n\n return this._runRequest(this.datasource, request, this.datasource.variables.query.bind(this.datasource.variables));\n }\n}\n\nclass LegacyQueryRunner implements QueryRunner {\n public constructor(private datasource: DataSourceApi) {}\n\n public getTarget(variable: QueryVariable) {\n if (hasLegacyVariableSupport(this.datasource)) {\n return variable.state.query;\n }\n\n throw new Error(\"Couldn't create a target with supplied arguments.\");\n }\n\n public runRequest({ variable, searchFilter }: RunnerArgs, request: DataQueryRequest) {\n if (!hasLegacyVariableSupport(this.datasource)) {\n return getEmptyMetricFindValueObservable();\n }\n\n return from(\n this.datasource.metricFindQuery(variable.state.query, {\n ...request,\n // variable is used by SQL common data source\n variable: {\n name: variable.state.name,\n type: variable.state.type,\n },\n searchFilter,\n })\n ).pipe(\n mergeMap((values) => {\n if (!values || !values.length) {\n return getEmptyMetricFindValueObservable();\n }\n\n const series: any = values;\n return of({ series, state: LoadingState.Done, timeRange: request.range });\n })\n );\n }\n}\n\nclass CustomQueryRunner implements QueryRunner {\n public constructor(private datasource: DataSourceApi, private _runRequest = getRunRequest()) {}\n\n public getTarget(variable: QueryVariable) {\n if (hasCustomVariableSupport(this.datasource)) {\n return variable.state.query;\n }\n\n throw new Error(\"Couldn't create a target with supplied arguments.\");\n }\n\n public runRequest(_: RunnerArgs, request: DataQueryRequest) {\n if (!hasCustomVariableSupport(this.datasource)) {\n return getEmptyMetricFindValueObservable();\n }\n\n if (!this.datasource.variables.query) {\n return this._runRequest(this.datasource, request);\n }\n return this._runRequest(this.datasource, request, this.datasource.variables.query.bind(this.datasource.variables));\n }\n}\n\nfunction getEmptyMetricFindValueObservable(): Observable<PanelData> {\n return of({ state: LoadingState.Done, series: [], timeRange: getDefaultTimeRange() });\n}\n\nfunction createQueryVariableRunnerFactory(datasource: DataSourceApi): QueryRunner {\n if (hasStandardVariableSupport(datasource)) {\n return new StandardQueryRunner(datasource, getRunRequest());\n }\n\n if (hasLegacyVariableSupport(datasource)) {\n return new LegacyQueryRunner(datasource);\n }\n\n if (hasCustomVariableSupport(datasource)) {\n return new CustomQueryRunner(datasource);\n }\n\n throw new Error(`Couldn't create a query runner for datasource ${datasource.type}`);\n}\n\nexport let createQueryVariableRunner = createQueryVariableRunnerFactory;\n\n/**\n * Use only in tests\n */\nexport function setCreateQueryVariableRunnerFactory(fn: (datasource: DataSourceApi) => QueryRunner) {\n createQueryVariableRunner = fn;\n}\n\n/**\n * Fixes old legacy query string models and adds refId if missing\n */\nfunction ensureVariableQueryModelIsADataQuery(variable: QueryVariable): StandardVariableQuery {\n const query = variable.state.query;\n\n // Turn into query object if it's just a string\n if (!query || typeof query !== 'object') {\n return { query: query, refId: `variable-${variable.state.name}` };\n }\n\n // Add potentially missing refId\n if (query.refId == null) {\n return { ...query, refId: `variable-${variable.state.name}` } as StandardVariableQuery;\n }\n\n return variable.state.query as StandardVariableQuery;\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"createQueryVariableRunner.js","sources":["../../../../../src/variables/variants/query/createQueryVariableRunner.ts"],"sourcesContent":["import { from, mergeMap, Observable, of } from 'rxjs';\n\nimport {\n DataQueryRequest,\n DataSourceApi,\n getDefaultTimeRange,\n LoadingState,\n PanelData,\n StandardVariableQuery,\n} from '@grafana/data';\nimport { getRunRequest } from '@grafana/runtime';\n\nimport { hasCustomVariableSupport, hasLegacyVariableSupport, hasStandardVariableSupport } from './guards';\n\nimport { QueryVariable } from './QueryVariable';\nimport { DataQuery } from '@grafana/schema';\n\nexport interface RunnerArgs {\n searchFilter?: string;\n variable: QueryVariable;\n}\n\nexport interface QueryRunner {\n getTarget: (variable: QueryVariable) => DataQuery | string;\n runRequest: (args: RunnerArgs, request: DataQueryRequest) => Observable<PanelData>;\n}\n\nclass StandardQueryRunner implements QueryRunner {\n public constructor(private datasource: DataSourceApi, private _runRequest = getRunRequest()) {}\n\n public getTarget(variable: QueryVariable) {\n if (hasStandardVariableSupport(this.datasource)) {\n return this.datasource.variables.toDataQuery(ensureVariableQueryModelIsADataQuery(variable));\n }\n\n throw new Error(\"Couldn't create a target with supplied arguments.\");\n }\n\n public runRequest(_: RunnerArgs, request: DataQueryRequest) {\n if (!hasStandardVariableSupport(this.datasource)) {\n return getEmptyMetricFindValueObservable();\n }\n\n if (!this.datasource.variables.query) {\n return this._runRequest(this.datasource, request);\n }\n\n return this._runRequest(this.datasource, request, this.datasource.variables.query.bind(this.datasource.variables));\n }\n}\n\nclass LegacyQueryRunner implements QueryRunner {\n public constructor(private datasource: DataSourceApi) {}\n\n public getTarget(variable: QueryVariable) {\n if (hasLegacyVariableSupport(this.datasource)) {\n return variable.state.query;\n }\n\n throw new Error(\"Couldn't create a target with supplied arguments.\");\n }\n\n public runRequest({ variable, searchFilter }: RunnerArgs, request: DataQueryRequest) {\n if (!hasLegacyVariableSupport(this.datasource)) {\n return getEmptyMetricFindValueObservable();\n }\n\n return from(\n this.datasource.metricFindQuery(variable.state.query, {\n ...request,\n // variable is used by SQL common data source\n variable: {\n name: variable.state.name,\n type: variable.state.type,\n },\n searchFilter,\n })\n ).pipe(\n mergeMap((values) => {\n if (!values || !values.length) {\n return getEmptyMetricFindValueObservable();\n }\n\n const series: any = values;\n return of({ series, state: LoadingState.Done, timeRange: request.range });\n })\n );\n }\n}\n\nclass CustomQueryRunner implements QueryRunner {\n public constructor(private datasource: DataSourceApi, private _runRequest = getRunRequest()) {}\n\n public getTarget(variable: QueryVariable) {\n if (hasCustomVariableSupport(this.datasource)) {\n return variable.state.query;\n }\n\n throw new Error(\"Couldn't create a target with supplied arguments.\");\n }\n\n public runRequest(_: RunnerArgs, request: DataQueryRequest) {\n if (!hasCustomVariableSupport(this.datasource)) {\n return getEmptyMetricFindValueObservable();\n }\n\n if (!this.datasource.variables.query) {\n return this._runRequest(this.datasource, request);\n }\n return this._runRequest(this.datasource, request, this.datasource.variables.query.bind(this.datasource.variables));\n }\n}\n\nfunction getEmptyMetricFindValueObservable(): Observable<PanelData> {\n return of({ state: LoadingState.Done, series: [], timeRange: getDefaultTimeRange() });\n}\n\nfunction createQueryVariableRunnerFactory(datasource: DataSourceApi): QueryRunner {\n if (hasStandardVariableSupport(datasource)) {\n return new StandardQueryRunner(datasource, getRunRequest());\n }\n\n if (hasLegacyVariableSupport(datasource)) {\n return new LegacyQueryRunner(datasource);\n }\n\n if (hasCustomVariableSupport(datasource)) {\n return new CustomQueryRunner(datasource);\n }\n\n throw new Error(`Couldn't create a query runner for datasource ${datasource.type}`);\n}\n\nexport let createQueryVariableRunner = createQueryVariableRunnerFactory;\n\n/**\n * Use only in tests\n */\nexport function setCreateQueryVariableRunnerFactory(fn: (datasource: DataSourceApi) => QueryRunner) {\n createQueryVariableRunner = fn;\n}\n\n/**\n * Fixes old legacy query string models and adds refId if missing\n */\nfunction ensureVariableQueryModelIsADataQuery(variable: QueryVariable): StandardVariableQuery {\n const query = variable.state.query ?? '';\n\n // Turn into query object if it's just a string\n if (typeof query === 'string') {\n return { query, refId: `variable-${variable.state.name}` };\n }\n\n // Add potentially missing refId\n if (query.refId == null) {\n return { ...query, refId: `variable-${variable.state.name}` } as StandardVariableQuery;\n }\n\n return variable.state.query as StandardVariableQuery;\n}\n"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -901,8 +901,8 @@ declare class GroupByVariable extends MultiValueVariable<GroupByVariableState> {
901
901
  * Allows clearing the value of the variable to an empty value. Overrides default behavior of a MultiValueVariable
902
902
  */
903
903
  getDefaultMultiState(options: VariableValueOption[]): {
904
- value: never[];
905
- text: never[];
904
+ value: VariableValueSingle[];
905
+ text: string[];
906
906
  };
907
907
  /**
908
908
  * Get all queries in the scene that have the same datasource as this AggregationsSet
@@ -1090,7 +1090,7 @@ declare class LiveNowTimer extends SceneObjectBase<LiveNowTimerState> {
1090
1090
  private timerId;
1091
1091
  private static REFRESH_RATE;
1092
1092
  constructor({ enabled }: {
1093
- enabled?: boolean | undefined;
1093
+ enabled?: boolean;
1094
1094
  });
1095
1095
  private _activationHandler;
1096
1096
  enable(): void;
@@ -1185,18 +1185,18 @@ declare class AnnotationsDataLayer extends SceneDataLayerBase<AnnotationsDataLay
1185
1185
  protected processEvents(query: AnnotationQuery, events: AnnotationQueryResults): {
1186
1186
  state: LoadingState;
1187
1187
  series: _grafana_data.DataFrame[];
1188
- structureRev?: number | undefined;
1189
- annotations?: _grafana_data.DataFrame[] | undefined;
1190
- alertState?: _grafana_data.AlertStateInfo | undefined;
1191
- request?: _grafana_data.DataQueryRequest<_grafana_data.DataQuery> | undefined;
1192
- timings?: _grafana_data.DataQueryTimings | undefined;
1193
- errors?: _grafana_data.DataQueryError[] | undefined;
1194
- error?: _grafana_data.DataQueryError | undefined;
1188
+ structureRev?: number;
1189
+ annotations?: _grafana_data.DataFrame[];
1190
+ alertState?: _grafana_data.AlertStateInfo;
1191
+ request?: _grafana_data.DataQueryRequest<_grafana_data.DataQuery>;
1192
+ timings?: _grafana_data.DataQueryTimings;
1193
+ errors?: _grafana_data.DataQueryError[];
1194
+ error?: _grafana_data.DataQueryError;
1195
1195
  timeRange: _grafana_data.TimeRange;
1196
- traceIds?: string[] | undefined;
1196
+ traceIds?: string[];
1197
1197
  };
1198
1198
  }
1199
- declare function AnnotationsDataLayerRenderer({ model }: SceneComponentProps<AnnotationsDataLayer>): JSX.Element | null;
1199
+ declare function AnnotationsDataLayerRenderer({ model }: SceneComponentProps<AnnotationsDataLayer>): JSX.Element;
1200
1200
 
1201
1201
  type index_AnnotationsDataLayer = AnnotationsDataLayer;
1202
1202
  declare const index_AnnotationsDataLayer: typeof AnnotationsDataLayer;
@@ -1303,7 +1303,7 @@ declare class SceneDataLayerControls extends SceneObjectBase<SceneDataLayerContr
1303
1303
  static Component: typeof SceneDataLayerControlsRenderer;
1304
1304
  constructor();
1305
1305
  }
1306
- declare function SceneDataLayerControlsRenderer({ model }: SceneComponentProps<SceneDataLayerControls>): JSX.Element | null;
1306
+ declare function SceneDataLayerControlsRenderer({ model }: SceneComponentProps<SceneDataLayerControls>): JSX.Element;
1307
1307
 
1308
1308
  interface SceneDataTransformerState extends SceneDataState {
1309
1309
  /**
@@ -1358,7 +1358,7 @@ interface VariableValueControlState extends SceneObjectState {
1358
1358
  declare class VariableValueControl extends SceneObjectBase<VariableValueControlState> {
1359
1359
  static Component: typeof VariableValueControlRenderer;
1360
1360
  }
1361
- declare function VariableValueControlRenderer({ model }: SceneComponentProps<VariableValueControl>): JSX.Element | null;
1361
+ declare function VariableValueControlRenderer({ model }: SceneComponentProps<VariableValueControl>): JSX.Element;
1362
1362
 
1363
1363
  declare class SceneVariableSet extends SceneObjectBase<SceneVariableSetState> implements SceneVariables {
1364
1364
  /** Variables that have changed in since the activation or since the first manual value change */
@@ -1689,7 +1689,7 @@ declare class SceneTimePicker extends SceneObjectBase<SceneTimePickerState> {
1689
1689
  onMoveBackward: () => void;
1690
1690
  onMoveForward: () => void;
1691
1691
  }
1692
- declare function SceneTimePickerRenderer({ model }: SceneComponentProps<SceneTimePicker>): JSX.Element | null;
1692
+ declare function SceneTimePickerRenderer({ model }: SceneComponentProps<SceneTimePicker>): JSX.Element;
1693
1693
 
1694
1694
  interface SceneRefreshPickerState extends SceneObjectState {
1695
1695
  refresh: string;
@@ -1785,7 +1785,7 @@ declare class SceneFlexLayout extends SceneObjectBase<SceneFlexLayoutState> impl
1785
1785
  toggleDirection(): void;
1786
1786
  isDraggable(): boolean;
1787
1787
  }
1788
- declare function SceneFlexLayoutRenderer({ model, parentState }: SceneFlexItemRenderProps$1<SceneFlexLayout>): JSX.Element | null;
1788
+ declare function SceneFlexLayoutRenderer({ model, parentState }: SceneFlexItemRenderProps$1<SceneFlexLayout>): JSX.Element;
1789
1789
  interface SceneFlexItemPlacement {
1790
1790
  wrap?: CSSProperties['flexWrap'];
1791
1791
  direction?: CSSProperties['flexDirection'];
@@ -1817,7 +1817,7 @@ interface SceneFlexItemRenderProps$1<T> extends SceneComponentProps<T> {
1817
1817
  declare class SceneFlexItem extends SceneObjectBase<SceneFlexItemState> {
1818
1818
  static Component: typeof SceneFlexItemRenderer;
1819
1819
  }
1820
- declare function SceneFlexItemRenderer({ model, parentState }: SceneFlexItemRenderProps$1<SceneFlexItem>): JSX.Element | null;
1820
+ declare function SceneFlexItemRenderer({ model, parentState }: SceneFlexItemRenderProps$1<SceneFlexItem>): JSX.Element;
1821
1821
 
1822
1822
  interface SceneCSSGridLayoutState extends SceneObjectState, SceneCSSGridLayoutOptions {
1823
1823
  children: Array<SceneCSSGridItem | SceneObject>;
@@ -1861,7 +1861,7 @@ declare class SceneCSSGridLayout extends SceneObjectBase<SceneCSSGridLayoutState
1861
1861
  constructor(state: Partial<SceneCSSGridLayoutState>);
1862
1862
  isDraggable(): boolean;
1863
1863
  }
1864
- declare function SceneCSSGridLayoutRenderer({ model }: SceneCSSGridItemRenderProps<SceneCSSGridLayout>): JSX.Element | null;
1864
+ declare function SceneCSSGridLayoutRenderer({ model }: SceneCSSGridItemRenderProps<SceneCSSGridLayout>): JSX.Element;
1865
1865
  interface SceneCSSGridItemPlacement {
1866
1866
  /**
1867
1867
  * True when the item should rendered but not visible.
@@ -1883,7 +1883,7 @@ interface SceneCSSGridItemRenderProps<T> extends SceneComponentProps<T> {
1883
1883
  declare class SceneCSSGridItem extends SceneObjectBase<SceneCSSGridItemState> {
1884
1884
  static Component: typeof SceneCSSGridItemRenderer;
1885
1885
  }
1886
- declare function SceneCSSGridItemRenderer({ model, parentState }: SceneCSSGridItemRenderProps<SceneCSSGridItem>): JSX.Element | null;
1886
+ declare function SceneCSSGridItemRenderer({ model, parentState }: SceneCSSGridItemRenderProps<SceneCSSGridItem>): JSX.Element;
1887
1887
 
1888
1888
  declare function SceneGridLayoutRenderer({ model }: SceneComponentProps<SceneGridLayout>): JSX.Element;
1889
1889
 
@@ -1977,9 +1977,9 @@ interface SceneGridItemState extends SceneGridItemStateLike {
1977
1977
  declare class SceneGridItem extends SceneObjectBase<SceneGridItemState> implements SceneGridItemLike {
1978
1978
  static Component: typeof SceneGridItemRenderer;
1979
1979
  }
1980
- declare function SceneGridItemRenderer({ model }: SceneComponentProps<SceneGridItem>): JSX.Element | null;
1980
+ declare function SceneGridItemRenderer({ model }: SceneComponentProps<SceneGridItem>): JSX.Element;
1981
1981
 
1982
- declare function SplitLayoutRenderer({ model }: SceneFlexItemRenderProps<SplitLayout>): JSX.Element | null;
1982
+ declare function SplitLayoutRenderer({ model }: SceneFlexItemRenderProps<SplitLayout>): JSX.Element;
1983
1983
  interface SceneFlexItemRenderProps<T> extends SceneComponentProps<T> {
1984
1984
  parentState?: SceneFlexItemPlacement;
1985
1985
  }
@@ -2097,7 +2097,7 @@ declare class SceneAppPage extends SceneObjectBase<SceneAppPageState> implements
2097
2097
  initializeScene(scene: EmbeddedScene): void;
2098
2098
  getScene(routeMatch: SceneRouteMatch): EmbeddedScene;
2099
2099
  getDrilldownPage(drilldown: SceneAppDrilldownView, routeMatch: SceneRouteMatch<{}>): SceneAppPageLike;
2100
- enrichDataRequest(source: SceneObject): Partial<_grafana_data.DataQueryRequest<_grafana_data.DataQuery>> | null;
2100
+ enrichDataRequest(source: SceneObject): Partial<_grafana_data.DataQueryRequest<_grafana_data.DataQuery>>;
2101
2101
  }
2102
2102
  interface SceneAppPageRendererProps extends SceneComponentProps<SceneAppPage> {
2103
2103
  routeProps: RouteComponentProps;
@@ -2122,7 +2122,7 @@ interface SceneReactObjectState<TProps = {}> extends SceneObjectState {
2122
2122
  * A utility object that can be used to render any React component or ReactNode
2123
2123
  */
2124
2124
  declare class SceneReactObject<TProps = {}> extends SceneObjectBase<SceneReactObjectState<TProps>> {
2125
- static Component: ({ model }: SceneComponentProps<SceneReactObject>) => {} | null;
2125
+ static Component: ({ model }: SceneComponentProps<SceneReactObject>) => {};
2126
2126
  }
2127
2127
 
2128
2128
  type StandardFieldConfigInterface<T, C, Prefix extends string> = {
@@ -2275,7 +2275,7 @@ declare class VizPanelBuilder<TOptions extends {}, TFieldConfig extends {}> impl
2275
2275
  declare class PanelOptionsBuilder<TOptions extends {} = {}> {
2276
2276
  private defaultOptions?;
2277
2277
  private _options;
2278
- constructor(defaultOptions?: (() => Partial<TOptions>) | undefined);
2278
+ constructor(defaultOptions?: () => Partial<TOptions>);
2279
2279
  private setDefaults;
2280
2280
  /**
2281
2281
  * Set an individual panel option. This will merge the value with the existing options.
@@ -2312,7 +2312,7 @@ declare class FieldConfigBuilder<TFieldConfig extends {}> implements StandardFie
2312
2312
  private defaultFieldConfig?;
2313
2313
  private _fieldConfig;
2314
2314
  private _overridesBuilder;
2315
- constructor(defaultFieldConfig?: (() => TFieldConfig) | undefined);
2315
+ constructor(defaultFieldConfig?: () => TFieldConfig);
2316
2316
  private setDefaults;
2317
2317
  /**
2318
2318
  * Set color.
package/dist/index.js CHANGED
@@ -1546,7 +1546,7 @@ function getQueryController(sceneObject) {
1546
1546
  }
1547
1547
  parent = parent.parent;
1548
1548
  }
1549
- return parent;
1549
+ return void 0;
1550
1550
  }
1551
1551
 
1552
1552
  class SkipFormattingValue {
@@ -6590,8 +6590,9 @@ function createQueryVariableRunnerFactory(datasource) {
6590
6590
  }
6591
6591
  let createQueryVariableRunner = createQueryVariableRunnerFactory;
6592
6592
  function ensureVariableQueryModelIsADataQuery(variable) {
6593
- const query = variable.state.query;
6594
- if (!query || typeof query !== "object") {
6593
+ var _a;
6594
+ const query = (_a = variable.state.query) != null ? _a : "";
6595
+ if (typeof query === "string") {
6595
6596
  return { query, refId: `variable-${variable.state.name}` };
6596
6597
  }
6597
6598
  if (query.refId == null) {