@grafana/scenes 4.0.3 → 4.0.4--canary.657.8393255561.0

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.
@@ -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 // @ts-expect-error TODO: remove this once 10.4.0 is released\n let keys = await ds.getTagKeys({ filters: otherFilters, queries });\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":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAoDO,MAAM,wBAAwB,kBAAyC,CAAA;AAAA,EA4DrE,YAAY,YAA6C,EAAA;AAC9D,IAAM,KAAA,CAAA,aAAA,CAAA,cAAA,CAAA;AAAA,MACJ,OAAS,EAAA,IAAA;AAAA,MACT,IAAM,EAAA,EAAA;AAAA,MACN,OAAO,EAAC;AAAA,MACR,MAAM,EAAC;AAAA,MACP,SAAS,EAAC;AAAA,MACV,UAAY,EAAA,IAAA;AAAA,MACZ,aAAa,EAAC;AAAA,MACd,SAAW,EAAA,MAAA;AAAA,MACX,MAAQ,EAAA,YAAA;AAAA,MACR,IAAM,EAAA,SAAA;AAAA,KAAA,EACH,YAXC,CAAA,EAAA;AAAA,MAYJ,cAAgB,EAAA,IAAA;AAAA,KACjB,CAAA,CAAA,CAAA;AAYH,IAAO,IAAA,CAAA,QAAA,GAAW,OAAO,EAAsB,KAAA;AA1IjD,MAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;AA4II,MAAA,MAAM,WAAW,OAAM,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAM,EAAA,kBAAA,KAAX,4BAAgC,IAAM,EAAA,IAAA,CAAA,CAAA,CAAA;AAE7D,MAAI,IAAA,QAAA,IAAY,SAAS,OAAS,EAAA;AAChC,QAAA,OAAO,QAAS,CAAA,MAAA,CAAA;AAAA,OAClB;AAEA,MAAI,IAAA,IAAA,CAAK,MAAM,cAAgB,EAAA;AAC7B,QAAO,OAAA,IAAA,CAAK,MAAM,cAAe,CAAA,MAAA,CAAA,CAAO,0CAAU,MAAV,KAAA,IAAA,GAAA,EAAA,GAAoB,EAAE,CAAA,CAAA;AAAA,OAChE;AAEA,MAAI,IAAA,CAAC,GAAG,UAAY,EAAA;AAClB,QAAA,OAAO,EAAC,CAAA;AAAA,OACV;AAEA,MAAM,MAAA,OAAA,GAAU,KAAK,gBAAiB,EAAA,CAAA;AACtC,MAAA,MAAM,YAAe,GAAA,IAAA,CAAK,KAAM,CAAA,WAAA,IAAe,EAAC,CAAA;AAEhD,MAAI,IAAA,IAAA,GAAO,MAAM,EAAG,CAAA,UAAA,CAAW,EAAE,OAAS,EAAA,YAAA,EAAc,SAAS,CAAA,CAAA;AAEjE,MAAA,IAAI,QAAU,EAAA;AACZ,QAAO,IAAA,GAAA,IAAA,CAAK,MAAO,CAAA,QAAA,CAAS,MAAM,CAAA,CAAA;AAAA,OACpC;AAEA,MAAM,MAAA,iBAAA,GAAoB,KAAK,KAAM,CAAA,iBAAA,CAAA;AACrC,MAAA,IAAI,iBAAmB,EAAA;AACrB,QAAO,IAAA,GAAA,IAAA,CAAK,OAAO,CAAC,CAAA,KAAM,EAAE,IAAK,CAAA,KAAA,CAAM,iBAAiB,CAAC,CAAA,CAAA;AAAA,OAC3D;AAEA,MAAO,OAAA,IAAA,CAAA;AAAA,KACT,CAAA;AAzCE,IAAA,IAAA,CAAK,qBAAqB,MAAM;AAC9B,MAAA,yBAAA,CAA0B,IAAI,IAAI,CAAA,CAAA;AAElC,MAAO,OAAA,MAAM,yBAA0B,CAAA,MAAA,CAAO,IAAI,CAAA,CAAA;AAAA,KACnD,CAAA,CAAA;AAAA,GACH;AAAA,EA9EO,iBAAyD,GAAA;AAC9D,IAAA,OAAO,IAAK,CAAA,eAAA,CAAgB,EAAE,CAAE,CAAA,IAAA;AAAA,MAC9B,GAAA,CAAI,CAAC,OAAY,KAAA;AACf,QAAA,IAAA,CAAK,4BAA4B,OAAO,CAAA,CAAA;AACxC,QAAA,OAAO,EAAC,CAAA;AAAA,OACT,CAAA;AAAA,KACH,CAAA;AAAA,GACF;AAAA,EAEQ,4BAA4B,OAAgC,EAAA;AAClE,IAAA,MAAM,EAAE,KAAO,EAAA,YAAA,EAAc,IAAM,EAAA,WAAA,KAAgB,IAAK,CAAA,KAAA,CAAA;AAExD,IAAA,MAAM,WAAgD,GAAA;AAAA,MACpD,OAAA;AAAA,MACA,OAAS,EAAA,KAAA;AAAA,MACT,KAAA,EAAO,sCAAgB,EAAC;AAAA,MACxB,IAAA,EAAM,oCAAe,EAAC;AAAA,KACxB,CAAA;AAEA,IAAA,IAAA,CAAK,SAAS,WAAW,CAAA,CAAA;AAAA,GAC3B;AAAA,EAEO,gBAAgB,IAAiE,EAAA;AAEtF,IAAI,IAAA,IAAA,CAAK,MAAM,cAAgB,EAAA;AAC7B,MAAO,OAAA,EAAA;AAAA,QACL,IAAK,CAAA,KAAA,CAAM,cAAe,CAAA,GAAA,CAAI,CAAC,CAAO,MAAA;AAAA,UACpC,OAAO,CAAE,CAAA,IAAA;AAAA,UACT,KAAA,EAAO,MAAO,CAAA,CAAA,CAAE,KAAK,CAAA;AAAA,SACrB,CAAA,CAAA;AAAA,OACJ,CAAA;AAAA,KACF;AAEA,IAAA,IAAA,CAAK,SAAS,EAAE,OAAA,EAAS,IAAM,EAAA,KAAA,EAAO,MAAM,CAAA,CAAA;AAE5C,IAAO,OAAA,IAAA;AAAA,MACL,aAAA,CAAc,IAAK,CAAA,KAAA,CAAM,UAAY,EAAA;AAAA,QACnC,aAAe,EAAA,EAAE,IAAM,EAAA,eAAA,EAAiB,OAAO,IAAK,EAAA;AAAA,OACrD,CAAA;AAAA,KACD,CAAA,IAAA;AAAA,MACA,QAAA,CAAS,CAAC,EAAO,KAAA;AACf,QAAA,OAAO,IAAK,CAAA,IAAA,CAAK,QAAS,CAAA,EAAE,CAAC,CAAE,CAAA,IAAA;AAAA,UAC7B,KAAK,CAAC,CAAA;AAAA,UACN,QAAA,CAAS,CAAC,IAA4B,KAAA;AACpC,YAAA,MAAM,CAA2B,GAAA,IAAA,CAAK,GAAI,CAAA,CAAC,CAAM,KAAA;AAC/C,cAAO,OAAA;AAAA,gBACL,OAAO,CAAE,CAAA,IAAA;AAAA,gBACT,OAAO,CAAE,CAAA,KAAA,GAAQ,OAAO,CAAE,CAAA,KAAK,IAAI,CAAE,CAAA,IAAA;AAAA,eACvC,CAAA;AAAA,aACD,CAAA,CAAA;AACD,YAAA,OAAO,GAAG,CAAC,CAAA,CAAA;AAAA,WACZ,CAAA;AAAA,SACH,CAAA;AAAA,OACD,CAAA;AAAA,KACH,CAAA;AAAA,GACF;AAAA,EAgEO,qBAAqB,OAAgC,EAAA;AAC1D,IAAA,OAAO,EAAE,KAAO,EAAA,EAAI,EAAA,IAAA,EAAM,EAAG,EAAA,CAAA;AAAA,GAC/B;AAAA,EAKQ,gBAAwC,GAAA;AAC9C,IAAA,MAAM,UAAU,UAAW,CAAA,cAAA;AAAA,MACzB,KAAK,OAAQ,EAAA;AAAA,MACb,CAAC,MAAM,CAAa,YAAA,gBAAA;AAAA,KACtB,CAAA;AAEA,IAAA,MAAM,iBAAoB,GAAA,OAAA,CAAQ,MAAO,CAAA,CAAC,CAAG,KAAA;AA3LjD,MAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AA2LoD,MAAA,OAAA,CAAA,CAAA,EAAA,GAAA,CAAA,CAAE,MAAM,UAAR,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAoB,WAAQ,EAAK,GAAA,IAAA,CAAA,KAAA,CAAM,eAAX,IAAuB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAA,CAAA,CAAA;AAAA,KAAG,CAAA,CAAA;AAEtG,IAAI,IAAA,iBAAA,CAAkB,WAAW,CAAG,EAAA;AAClC,MAAA,OAAO,EAAC,CAAA;AAAA,KACV;AAEA,IAAA,MAAM,SAA8B,EAAC,CAAA;AACrC,IAAkB,iBAAA,CAAA,OAAA,CAAQ,CAAC,CAAM,KAAA;AAC/B,MAAA,MAAA,CAAO,IAAK,CAAA,GAAG,CAAE,CAAA,KAAA,CAAM,OAAO,CAAA,CAAA;AAAA,KAC/B,CAAA,CAAA;AAED,IAAO,OAAA,MAAA,CAAA;AAAA,GACT;AACF,CAAA;AApJa,eAAA,CACJ,SAAY,GAAA,uBAAA,CAAA;AAqJL,SAAA,uBAAA,CAAwB,EAAE,KAAA,EAAkD,EAAA;AAC1F,EAAA,OAAO,wBAAwB,KAAK,CAAA,CAAA;AACtC;;;;"}
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 // @ts-expect-error TODO: remove this once 10.4.0 is released\n let keys = await ds.getTagKeys({ filters: otherFilters, queries });\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
@@ -1183,18 +1183,18 @@ declare class AnnotationsDataLayer extends SceneDataLayerBase<AnnotationsDataLay
1183
1183
  protected processEvents(query: AnnotationQuery, events: AnnotationQueryResults): {
1184
1184
  state: LoadingState;
1185
1185
  series: _grafana_data.DataFrame[];
1186
- structureRev?: number | undefined;
1187
- annotations?: _grafana_data.DataFrame[] | undefined;
1188
- alertState?: _grafana_data.AlertStateInfo | undefined;
1189
- request?: _grafana_data.DataQueryRequest<_grafana_data.DataQuery> | undefined;
1190
- timings?: _grafana_data.DataQueryTimings | undefined;
1191
- errors?: _grafana_data.DataQueryError[] | undefined;
1192
- error?: _grafana_data.DataQueryError | undefined;
1186
+ structureRev?: number;
1187
+ annotations?: _grafana_data.DataFrame[];
1188
+ alertState?: _grafana_data.AlertStateInfo;
1189
+ request?: _grafana_data.DataQueryRequest<_grafana_data.DataQuery>;
1190
+ timings?: _grafana_data.DataQueryTimings;
1191
+ errors?: _grafana_data.DataQueryError[];
1192
+ error?: _grafana_data.DataQueryError;
1193
1193
  timeRange: _grafana_data.TimeRange;
1194
- traceIds?: string[] | undefined;
1194
+ traceIds?: string[];
1195
1195
  };
1196
1196
  }
1197
- declare function AnnotationsDataLayerRenderer({ model }: SceneComponentProps<AnnotationsDataLayer>): JSX.Element | null;
1197
+ declare function AnnotationsDataLayerRenderer({ model }: SceneComponentProps<AnnotationsDataLayer>): JSX.Element;
1198
1198
 
1199
1199
  type index_AnnotationsDataLayer = AnnotationsDataLayer;
1200
1200
  declare const index_AnnotationsDataLayer: typeof AnnotationsDataLayer;
@@ -1301,7 +1301,7 @@ declare class SceneDataLayerControls extends SceneObjectBase<SceneDataLayerContr
1301
1301
  static Component: typeof SceneDataLayerControlsRenderer;
1302
1302
  constructor();
1303
1303
  }
1304
- declare function SceneDataLayerControlsRenderer({ model }: SceneComponentProps<SceneDataLayerControls>): JSX.Element | null;
1304
+ declare function SceneDataLayerControlsRenderer({ model }: SceneComponentProps<SceneDataLayerControls>): JSX.Element;
1305
1305
 
1306
1306
  interface SceneDataTransformerState extends SceneDataState {
1307
1307
  /**
@@ -1356,7 +1356,7 @@ interface VariableValueControlState extends SceneObjectState {
1356
1356
  declare class VariableValueControl extends SceneObjectBase<VariableValueControlState> {
1357
1357
  static Component: typeof VariableValueControlRenderer;
1358
1358
  }
1359
- declare function VariableValueControlRenderer({ model }: SceneComponentProps<VariableValueControl>): JSX.Element | null;
1359
+ declare function VariableValueControlRenderer({ model }: SceneComponentProps<VariableValueControl>): JSX.Element;
1360
1360
 
1361
1361
  declare class SceneVariableSet extends SceneObjectBase<SceneVariableSetState> implements SceneVariables {
1362
1362
  /** Variables that have changed in since the activation or since the first manual value change */
@@ -1687,7 +1687,7 @@ declare class SceneTimePicker extends SceneObjectBase<SceneTimePickerState> {
1687
1687
  onMoveBackward: () => void;
1688
1688
  onMoveForward: () => void;
1689
1689
  }
1690
- declare function SceneTimePickerRenderer({ model }: SceneComponentProps<SceneTimePicker>): JSX.Element | null;
1690
+ declare function SceneTimePickerRenderer({ model }: SceneComponentProps<SceneTimePicker>): JSX.Element;
1691
1691
 
1692
1692
  interface SceneRefreshPickerState extends SceneObjectState {
1693
1693
  refresh: string;
@@ -1778,7 +1778,7 @@ declare class SceneFlexLayout extends SceneObjectBase<SceneFlexLayoutState> impl
1778
1778
  toggleDirection(): void;
1779
1779
  isDraggable(): boolean;
1780
1780
  }
1781
- declare function SceneFlexLayoutRenderer({ model, parentState }: SceneFlexItemRenderProps$1<SceneFlexLayout>): JSX.Element | null;
1781
+ declare function SceneFlexLayoutRenderer({ model, parentState }: SceneFlexItemRenderProps$1<SceneFlexLayout>): JSX.Element;
1782
1782
  interface SceneFlexItemPlacement {
1783
1783
  wrap?: CSSProperties['flexWrap'];
1784
1784
  direction?: CSSProperties['flexDirection'];
@@ -1810,7 +1810,7 @@ interface SceneFlexItemRenderProps$1<T> extends SceneComponentProps<T> {
1810
1810
  declare class SceneFlexItem extends SceneObjectBase<SceneFlexItemState> {
1811
1811
  static Component: typeof SceneFlexItemRenderer;
1812
1812
  }
1813
- declare function SceneFlexItemRenderer({ model, parentState }: SceneFlexItemRenderProps$1<SceneFlexItem>): JSX.Element | null;
1813
+ declare function SceneFlexItemRenderer({ model, parentState }: SceneFlexItemRenderProps$1<SceneFlexItem>): JSX.Element;
1814
1814
 
1815
1815
  interface SceneCSSGridLayoutState extends SceneObjectState, SceneCSSGridLayoutOptions {
1816
1816
  children: Array<SceneCSSGridItem | SceneObject>;
@@ -1854,7 +1854,7 @@ declare class SceneCSSGridLayout extends SceneObjectBase<SceneCSSGridLayoutState
1854
1854
  constructor(state: Partial<SceneCSSGridLayoutState>);
1855
1855
  isDraggable(): boolean;
1856
1856
  }
1857
- declare function SceneCSSGridLayoutRenderer({ model }: SceneCSSGridItemRenderProps<SceneCSSGridLayout>): JSX.Element | null;
1857
+ declare function SceneCSSGridLayoutRenderer({ model }: SceneCSSGridItemRenderProps<SceneCSSGridLayout>): JSX.Element;
1858
1858
  interface SceneCSSGridItemPlacement {
1859
1859
  /**
1860
1860
  * True when the item should rendered but not visible.
@@ -1876,7 +1876,7 @@ interface SceneCSSGridItemRenderProps<T> extends SceneComponentProps<T> {
1876
1876
  declare class SceneCSSGridItem extends SceneObjectBase<SceneCSSGridItemState> {
1877
1877
  static Component: typeof SceneCSSGridItemRenderer;
1878
1878
  }
1879
- declare function SceneCSSGridItemRenderer({ model, parentState }: SceneCSSGridItemRenderProps<SceneCSSGridItem>): JSX.Element | null;
1879
+ declare function SceneCSSGridItemRenderer({ model, parentState }: SceneCSSGridItemRenderProps<SceneCSSGridItem>): JSX.Element;
1880
1880
 
1881
1881
  declare function SceneGridLayoutRenderer({ model }: SceneComponentProps<SceneGridLayout>): JSX.Element;
1882
1882
 
@@ -1964,9 +1964,9 @@ interface SceneGridItemState extends SceneGridItemStateLike {
1964
1964
  declare class SceneGridItem extends SceneObjectBase<SceneGridItemState> implements SceneGridItemLike {
1965
1965
  static Component: typeof SceneGridItemRenderer;
1966
1966
  }
1967
- declare function SceneGridItemRenderer({ model }: SceneComponentProps<SceneGridItem>): JSX.Element | null;
1967
+ declare function SceneGridItemRenderer({ model }: SceneComponentProps<SceneGridItem>): JSX.Element;
1968
1968
 
1969
- declare function SplitLayoutRenderer({ model }: SceneFlexItemRenderProps<SplitLayout>): JSX.Element | null;
1969
+ declare function SplitLayoutRenderer({ model }: SceneFlexItemRenderProps<SplitLayout>): JSX.Element;
1970
1970
  interface SceneFlexItemRenderProps<T> extends SceneComponentProps<T> {
1971
1971
  parentState?: SceneFlexItemPlacement;
1972
1972
  }
@@ -2084,7 +2084,7 @@ declare class SceneAppPage extends SceneObjectBase<SceneAppPageState> implements
2084
2084
  initializeScene(scene: EmbeddedScene): void;
2085
2085
  getScene(routeMatch: SceneRouteMatch): EmbeddedScene;
2086
2086
  getDrilldownPage(drilldown: SceneAppDrilldownView, routeMatch: SceneRouteMatch<{}>): SceneAppPageLike;
2087
- enrichDataRequest(source: SceneObject): Partial<_grafana_data.DataQueryRequest<_grafana_data.DataQuery>> | null;
2087
+ enrichDataRequest(source: SceneObject): Partial<_grafana_data.DataQueryRequest<_grafana_data.DataQuery>>;
2088
2088
  }
2089
2089
  interface SceneAppPageRendererProps extends SceneComponentProps<SceneAppPage> {
2090
2090
  routeProps: RouteComponentProps;
@@ -2109,7 +2109,7 @@ interface SceneReactObjectState<TProps = {}> extends SceneObjectState {
2109
2109
  * A utility object that can be used to render any React component or ReactNode
2110
2110
  */
2111
2111
  declare class SceneReactObject<TProps = {}> extends SceneObjectBase<SceneReactObjectState<TProps>> {
2112
- static Component: ({ model }: SceneComponentProps<SceneReactObject>) => {} | null;
2112
+ static Component: ({ model }: SceneComponentProps<SceneReactObject>) => {};
2113
2113
  }
2114
2114
 
2115
2115
  type StandardFieldConfigInterface<T, C, Prefix extends string> = {
@@ -2262,7 +2262,7 @@ declare class VizPanelBuilder<TOptions extends {}, TFieldConfig extends {}> impl
2262
2262
  declare class PanelOptionsBuilder<TOptions extends {} = {}> {
2263
2263
  private defaultOptions?;
2264
2264
  private _options;
2265
- constructor(defaultOptions?: (() => Partial<TOptions>) | undefined);
2265
+ constructor(defaultOptions?: () => Partial<TOptions>);
2266
2266
  private setDefaults;
2267
2267
  /**
2268
2268
  * Set an individual panel option. This will merge the value with the existing options.
@@ -2299,7 +2299,7 @@ declare class FieldConfigBuilder<TFieldConfig extends {}> implements StandardFie
2299
2299
  private defaultFieldConfig?;
2300
2300
  private _fieldConfig;
2301
2301
  private _overridesBuilder;
2302
- constructor(defaultFieldConfig?: (() => TFieldConfig) | undefined);
2302
+ constructor(defaultFieldConfig?: () => TFieldConfig);
2303
2303
  private setDefaults;
2304
2304
  /**
2305
2305
  * 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 {
@@ -6581,8 +6581,9 @@ function createQueryVariableRunnerFactory(datasource) {
6581
6581
  }
6582
6582
  let createQueryVariableRunner = createQueryVariableRunnerFactory;
6583
6583
  function ensureVariableQueryModelIsADataQuery(variable) {
6584
- const query = variable.state.query;
6585
- if (!query || typeof query !== "object") {
6584
+ var _a;
6585
+ const query = (_a = variable.state.query) != null ? _a : "";
6586
+ if (typeof query === "string") {
6586
6587
  return { query, refId: `variable-${variable.state.name}` };
6587
6588
  }
6588
6589
  if (query.refId == null) {