@grafana/scenes 6.1.1 → 6.1.2--canary.1060.13501815546.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":"AdHocFiltersVariable.js","sources":["../../../../src/variables/adhoc/AdHocFiltersVariable.tsx"],"sourcesContent":["import React from 'react';\nimport { AdHocVariableFilter, GetTagResponse, GrafanaTheme2, MetricFindValue, SelectableValue } from '@grafana/data';\nimport { SceneObjectBase } from '../../core/SceneObjectBase';\nimport { SceneVariable, SceneVariableState, SceneVariableValueChangedEvent, VariableValue } from '../types';\nimport { ControlsLayout, SceneComponentProps } from '../../core/types';\nimport { DataSourceRef } from '@grafana/schema';\nimport { dataFromResponse, getQueriesForVariables, renderPrometheusLabelFilters, responseHasError } from '../utils';\nimport { patchGetAdhocFilters } from './patchGetAdhocFilters';\nimport { useStyles2 } from '@grafana/ui';\nimport { sceneGraph } from '../../core/sceneGraph';\nimport { AdHocFilterBuilder } from './AdHocFilterBuilder';\nimport { AdHocFilterRenderer } from './AdHocFilterRenderer';\nimport { getDataSourceSrv } from '@grafana/runtime';\nimport { AdHocFiltersVariableUrlSyncHandler } from './AdHocFiltersVariableUrlSyncHandler';\nimport { css } from '@emotion/css';\nimport { getEnrichedFiltersRequest } from '../getEnrichedFiltersRequest';\nimport { AdHocFiltersComboboxRenderer } from './AdHocFiltersCombobox/AdHocFiltersComboboxRenderer';\nimport { wrapInSafeSerializableSceneObject } from '../../utils/wrapInSafeSerializableSceneObject';\n\nexport interface AdHocFilterWithLabels<M extends Record<string, any> = {}> extends AdHocVariableFilter {\n keyLabel?: string;\n valueLabels?: string[];\n // this is used to externally trigger edit mode in combobox filter UI\n forceEdit?: boolean;\n // hide the filter from AdHocFiltersVariableRenderer and the URL\n hidden?: boolean;\n meta?: M;\n}\n\nexport type AdHocControlsLayout = ControlsLayout | 'combobox';\n\nexport interface AdHocFiltersVariableState extends SceneVariableState {\n /** Optional text to display on the 'add filter' button */\n addFilterButtonText?: string;\n /** The visible filters */\n filters: AdHocFilterWithLabels[];\n /** Base filters to always apply when looking up keys*/\n baseFilters?: AdHocFilterWithLabels[];\n /** Datasource to use for getTagKeys and getTagValues and also controls which scene queries the filters should apply to */\n datasource: DataSourceRef | null;\n /** Controls if the filters can be changed */\n readOnly?: boolean;\n /**\n * @experimental\n * Controls the layout and design of the label.\n */\n layout?: AdHocControlsLayout;\n /**\n * Defaults to automatic which means filters will automatically be applied to all queries with the same data source as this AdHocFilterSet.\n * In manual mode you either have to use the filters programmatically or as a variable inside query expressions.\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 * Extension hook for customizing the value 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 getTagValuesProvider?: getTagValuesProvider;\n\n /**\n * Optionally provide an array of static keys that override getTagKeys\n */\n defaultKeys?: MetricFindValue[];\n\n /**\n * This is the expression that the filters resulted in. Defaults to\n * Prometheus / Loki compatible label filter expression\n */\n filterExpression?: string;\n\n /**\n * The default builder creates a Prometheus/Loki compatible filter expression,\n * this can be overridden to create a different expression based on the current filters.\n */\n expressionBuilder?: AdHocVariableExpressionBuilderFn;\n\n /**\n * Whether the filter supports new multi-value operators like =| and !=|\n */\n supportsMultiValueOperators?: boolean;\n\n /**\n * When querying the datasource for label names and values to determine keys and values\n * for this ad hoc filter, consider the queries in the scene and use them as a filter.\n * This queries filter can be used to ensure that only ad hoc filter options that would\n * impact the current queries are presented to the user.\n */\n useQueriesAsFilterForOptions?: boolean;\n\n /**\n * Flag that decides whether custom values can be added to the filter\n */\n allowCustomValue?: boolean;\n\n /**\n * @internal state of the new filter being added\n */\n _wip?: AdHocFilterWithLabels;\n\n /**\n * Allows custom formatting of a value before saving to filter state\n */\n onAddCustomValue?: OnAddCustomValueFn;\n}\n\nexport type AdHocVariableExpressionBuilderFn = (filters: AdHocFilterWithLabels[]) => string;\nexport type OnAddCustomValueFn = (\n item: SelectableValue<string> & { isCustom?: boolean },\n filter: AdHocFilterWithLabels\n) => { value: string | undefined; valueLabels: string[] };\n\nexport type getTagKeysProvider = (\n variable: AdHocFiltersVariable,\n currentKey: string | null,\n operators?: OperatorDefinition[]\n) => Promise<{ replace?: boolean; values: GetTagResponse | MetricFindValue[] }>;\n\nexport type getTagValuesProvider = (\n variable: AdHocFiltersVariable,\n filter: AdHocFilterWithLabels\n) => Promise<{ replace?: boolean; values: GetTagResponse | MetricFindValue[] }>;\n\nexport type AdHocFiltersVariableCreateHelperArgs = AdHocFiltersVariableState;\n\nexport type OperatorDefinition = {\n value: string;\n description?: string;\n isMulti?: Boolean;\n isRegex?: Boolean;\n};\n\nexport const OPERATORS: OperatorDefinition[] = [\n {\n value: '=',\n description: 'Equals',\n },\n {\n value: '!=',\n description: 'Not equal',\n },\n {\n value: '=|',\n description: 'One of. Use to filter on multiple values.',\n isMulti: true,\n },\n {\n value: '!=|',\n description: 'Not one of. Use to exclude multiple values.',\n isMulti: true,\n },\n {\n value: '=~',\n description: 'Matches regex',\n isRegex: true,\n },\n {\n value: '!~',\n description: 'Does not match regex',\n isRegex: true,\n },\n {\n value: '<',\n description: 'Less than',\n },\n {\n value: '>',\n description: 'Greater than',\n },\n];\n\nexport class AdHocFiltersVariable\n extends SceneObjectBase<AdHocFiltersVariableState>\n implements SceneVariable<AdHocFiltersVariableState>\n{\n static Component = AdHocFiltersVariableRenderer;\n\n private _scopedVars = { __sceneObject: wrapInSafeSerializableSceneObject(this) };\n private _dataSourceSrv = getDataSourceSrv();\n\n protected _urlSync = new AdHocFiltersVariableUrlSyncHandler(this);\n\n public constructor(state: Partial<AdHocFiltersVariableState>) {\n super({\n type: 'adhoc',\n name: state.name ?? 'Filters',\n filters: [],\n datasource: null,\n applyMode: 'auto',\n filterExpression: state.filterExpression ?? renderExpression(state.expressionBuilder, state.filters),\n ...state,\n });\n\n if (this.state.applyMode === 'auto') {\n patchGetAdhocFilters(this);\n }\n }\n\n public setState(update: Partial<AdHocFiltersVariableState>): void {\n let filterExpressionChanged = false;\n\n if (update.filters && update.filters !== this.state.filters && !update.filterExpression) {\n update.filterExpression = renderExpression(this.state.expressionBuilder, update.filters);\n filterExpressionChanged = update.filterExpression !== this.state.filterExpression;\n }\n\n super.setState(update);\n\n if (filterExpressionChanged) {\n this.publishEvent(new SceneVariableValueChangedEvent(this), true);\n }\n }\n\n /**\n * Updates the variable's `filters` and `filterExpression` state.\n * If `skipPublish` option is true, this will not emit the `SceneVariableValueChangedEvent`,\n * allowing consumers to update the filters without triggering dependent data providers.\n */\n public updateFilters(\n filters: AdHocFilterWithLabels[],\n options?: {\n skipPublish?: boolean;\n forcePublish?: boolean;\n }\n ): void {\n let filterExpressionChanged = false;\n let filterExpression = undefined;\n\n if (filters && filters !== this.state.filters) {\n filterExpression = renderExpression(this.state.expressionBuilder, filters);\n filterExpressionChanged = filterExpression !== this.state.filterExpression;\n }\n\n super.setState({\n filters,\n filterExpression,\n });\n\n if ((filterExpressionChanged && options?.skipPublish !== true) || options?.forcePublish) {\n this.publishEvent(new SceneVariableValueChangedEvent(this), true);\n }\n }\n\n public getValue(): VariableValue | undefined {\n return this.state.filterExpression;\n }\n\n public _updateFilter(filter: AdHocFilterWithLabels, update: Partial<AdHocFilterWithLabels>) {\n const { filters, _wip } = this.state;\n\n if (filter === _wip) {\n // If we set value we are done with this \"work in progress\" filter and we can add it\n if ('value' in update && update['value'] !== '') {\n this.setState({ filters: [...filters, { ..._wip, ...update }], _wip: undefined });\n } else {\n this.setState({ _wip: { ...filter, ...update } });\n }\n return;\n }\n\n const updatedFilters = this.state.filters.map((f) => {\n return f === filter ? { ...f, ...update } : f;\n });\n\n this.setState({ filters: updatedFilters });\n }\n\n public _removeFilter(filter: AdHocFilterWithLabels) {\n if (filter === this.state._wip) {\n this.setState({ _wip: undefined });\n return;\n }\n\n this.setState({ filters: this.state.filters.filter((f) => f !== filter) });\n }\n\n public _removeLastFilter() {\n const filterToRemove = this.state.filters.at(-1);\n\n if (filterToRemove) {\n this._removeFilter(filterToRemove);\n }\n }\n\n public _handleComboboxBackspace(filter: AdHocFilterWithLabels) {\n if (this.state.filters.length) {\n // default forceEdit last filter (when triggering from wip filter)\n let filterToForceIndex = this.state.filters.length - 1;\n\n // adjust filterToForceIndex index to -1 if backspace triggered from non wip filter\n // to avoid triggering forceEdit logic\n if (filter !== this.state._wip) {\n filterToForceIndex = -1;\n }\n\n this.setState({\n filters: this.state.filters.reduce<AdHocFilterWithLabels[]>((acc, f, index) => {\n // adjust forceEdit of preceding filter\n if (index === filterToForceIndex) {\n return [\n ...acc,\n {\n ...f,\n forceEdit: true,\n },\n ];\n }\n // remove current filter\n if (f === filter) {\n return acc;\n }\n\n return [...acc, f];\n }, []),\n });\n }\n }\n\n /**\n * Get possible keys given current filters. Do not call from plugins directly\n */\n public async _getKeys(currentKey: string | null): Promise<Array<SelectableValue<string>>> {\n const override = await this.state.getTagKeysProvider?.(this, currentKey);\n\n if (override && override.replace) {\n return dataFromResponse(override.values).map(toSelectableValue);\n }\n\n if (this.state.defaultKeys) {\n return this.state.defaultKeys.map(toSelectableValue);\n }\n\n const ds = await this._dataSourceSrv.get(this.state.datasource, this._scopedVars);\n if (!ds || !ds.getTagKeys) {\n return [];\n }\n\n const otherFilters = this.state.filters.filter((f) => f.key !== currentKey).concat(this.state.baseFilters ?? []);\n const timeRange = sceneGraph.getTimeRange(this).state.value;\n const queries = this.state.useQueriesAsFilterForOptions ? getQueriesForVariables(this) : undefined;\n const response = await ds.getTagKeys({\n filters: otherFilters,\n queries,\n timeRange,\n ...getEnrichedFiltersRequest(this),\n });\n\n if (responseHasError(response)) {\n this.setState({ error: response.error.message });\n }\n\n let keys = dataFromResponse(response);\n if (override) {\n keys = keys.concat(dataFromResponse(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.map(toSelectableValue);\n }\n\n /**\n * Get possible key values for a specific key given current filters. Do not call from plugins directly\n */\n public async _getValuesFor(filter: AdHocFilterWithLabels): Promise<Array<SelectableValue<string>>> {\n const override = await this.state.getTagValuesProvider?.(this, filter);\n\n if (override && override.replace) {\n return dataFromResponse(override.values).map(toSelectableValue);\n }\n\n const ds = await this._dataSourceSrv.get(this.state.datasource, this._scopedVars);\n\n if (!ds || !ds.getTagValues) {\n return [];\n }\n\n // Filter out the current filter key from the list of all filters\n const otherFilters = this.state.filters.filter((f) => f.key !== filter.key).concat(this.state.baseFilters ?? []);\n\n const timeRange = sceneGraph.getTimeRange(this).state.value;\n const queries = this.state.useQueriesAsFilterForOptions ? getQueriesForVariables(this) : undefined;\n\n const response = await ds.getTagValues({\n key: filter.key,\n filters: otherFilters,\n timeRange,\n queries,\n ...getEnrichedFiltersRequest(this),\n });\n\n if (responseHasError(response)) {\n this.setState({ error: response.error.message });\n }\n\n let values = dataFromResponse(response);\n if (override) {\n values = values.concat(dataFromResponse(override.values));\n }\n\n return values.map(toSelectableValue);\n }\n\n public _addWip() {\n this.setState({\n _wip: { key: '', value: '', operator: '=', condition: '' },\n });\n }\n\n public _getOperators() {\n const { supportsMultiValueOperators, allowCustomValue = true } = this.state;\n\n return OPERATORS.filter(({ isMulti, isRegex }) => {\n if (!supportsMultiValueOperators && isMulti) {\n return false;\n }\n if (!allowCustomValue && isRegex) {\n return false;\n }\n return true;\n }).map<SelectableValue<string>>(({ value, description }) => ({\n label: value,\n value,\n description,\n }));\n }\n}\n\nfunction renderExpression(\n builder: AdHocVariableExpressionBuilderFn | undefined,\n filters: AdHocFilterWithLabels[] | undefined\n) {\n return (builder ?? renderPrometheusLabelFilters)(filters ?? []);\n}\n\nexport function AdHocFiltersVariableRenderer({ model }: SceneComponentProps<AdHocFiltersVariable>) {\n const { filters, readOnly, addFilterButtonText } = model.useState();\n const styles = useStyles2(getStyles);\n\n if (model.state.layout === 'combobox') {\n return <AdHocFiltersComboboxRenderer model={model} />;\n }\n\n return (\n <div className={styles.wrapper}>\n {filters\n .filter((filter) => !filter.hidden)\n .map((filter, index) => (\n <React.Fragment key={index}>\n <AdHocFilterRenderer filter={filter} model={model} />\n </React.Fragment>\n ))}\n\n {!readOnly && <AdHocFilterBuilder model={model} key=\"'builder\" addFilterButtonText={addFilterButtonText} />}\n </div>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n wrapper: css({\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'flex-end',\n columnGap: theme.spacing(2),\n rowGap: theme.spacing(1),\n }),\n});\n\nexport function toSelectableValue(input: MetricFindValue): SelectableValue<string> {\n const { text, value } = input;\n const result: SelectableValue<string> = {\n // converting text to string due to some edge cases where it can be a number\n // TODO: remove once https://github.com/grafana/grafana/issues/99021 is closed\n label: String(text),\n value: String(value ?? text),\n };\n\n if ('group' in input) {\n result.group = input.group;\n }\n\n if ('meta' in input) {\n result.meta = input.meta;\n }\n\n return result;\n}\n\nexport function isFilterComplete(filter: AdHocFilterWithLabels): boolean {\n return filter.key !== '' && filter.operator !== '' && filter.value !== '';\n}\n\nexport function isMultiValueOperator(operatorValue: string): boolean {\n const operator = OPERATORS.find((o) => o.value === operatorValue);\n if (!operator) {\n // default to false if operator is not found\n return false;\n }\n return Boolean(operator.isMulti);\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6IO,MAAM,SAAkC,GAAA;AAAA,EAC7C;AAAA,IACE,KAAO,EAAA,GAAA;AAAA,IACP,WAAa,EAAA,QAAA;AAAA,GACf;AAAA,EACA;AAAA,IACE,KAAO,EAAA,IAAA;AAAA,IACP,WAAa,EAAA,WAAA;AAAA,GACf;AAAA,EACA;AAAA,IACE,KAAO,EAAA,IAAA;AAAA,IACP,WAAa,EAAA,2CAAA;AAAA,IACb,OAAS,EAAA,IAAA;AAAA,GACX;AAAA,EACA;AAAA,IACE,KAAO,EAAA,KAAA;AAAA,IACP,WAAa,EAAA,6CAAA;AAAA,IACb,OAAS,EAAA,IAAA;AAAA,GACX;AAAA,EACA;AAAA,IACE,KAAO,EAAA,IAAA;AAAA,IACP,WAAa,EAAA,eAAA;AAAA,IACb,OAAS,EAAA,IAAA;AAAA,GACX;AAAA,EACA;AAAA,IACE,KAAO,EAAA,IAAA;AAAA,IACP,WAAa,EAAA,sBAAA;AAAA,IACb,OAAS,EAAA,IAAA;AAAA,GACX;AAAA,EACA;AAAA,IACE,KAAO,EAAA,GAAA;AAAA,IACP,WAAa,EAAA,WAAA;AAAA,GACf;AAAA,EACA;AAAA,IACE,KAAO,EAAA,GAAA;AAAA,IACP,WAAa,EAAA,cAAA;AAAA,GACf;AACF,EAAA;AAEO,MAAM,6BACH,eAEV,CAAA;AAAA,EAQS,YAAY,KAA2C,EAAA;AA/LhE,IAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AAgMI,IAAM,KAAA,CAAA,cAAA,CAAA;AAAA,MACJ,IAAM,EAAA,OAAA;AAAA,MACN,IAAA,EAAA,CAAM,EAAM,GAAA,KAAA,CAAA,IAAA,KAAN,IAAc,GAAA,EAAA,GAAA,SAAA;AAAA,MACpB,SAAS,EAAC;AAAA,MACV,UAAY,EAAA,IAAA;AAAA,MACZ,SAAW,EAAA,MAAA;AAAA,MACX,gBAAA,EAAA,CAAkB,WAAM,gBAAN,KAAA,IAAA,GAAA,EAAA,GAA0B,iBAAiB,KAAM,CAAA,iBAAA,EAAmB,MAAM,OAAO,CAAA;AAAA,KAAA,EAChG,KACJ,CAAA,CAAA,CAAA;AAdH,IAAA,IAAA,CAAQ,WAAc,GAAA,EAAE,aAAe,EAAA,iCAAA,CAAkC,IAAI,CAAE,EAAA,CAAA;AAC/E,IAAA,IAAA,CAAQ,iBAAiB,gBAAiB,EAAA,CAAA;AAE1C,IAAU,IAAA,CAAA,QAAA,GAAW,IAAI,kCAAA,CAAmC,IAAI,CAAA,CAAA;AAa9D,IAAI,IAAA,IAAA,CAAK,KAAM,CAAA,SAAA,KAAc,MAAQ,EAAA;AACnC,MAAA,oBAAA,CAAqB,IAAI,CAAA,CAAA;AAAA,KAC3B;AAAA,GACF;AAAA,EAEO,SAAS,MAAkD,EAAA;AAChE,IAAA,IAAI,uBAA0B,GAAA,KAAA,CAAA;AAE9B,IAAI,IAAA,MAAA,CAAO,WAAW,MAAO,CAAA,OAAA,KAAY,KAAK,KAAM,CAAA,OAAA,IAAW,CAAC,MAAA,CAAO,gBAAkB,EAAA;AACvF,MAAA,MAAA,CAAO,mBAAmB,gBAAiB,CAAA,IAAA,CAAK,KAAM,CAAA,iBAAA,EAAmB,OAAO,OAAO,CAAA,CAAA;AACvF,MAA0B,uBAAA,GAAA,MAAA,CAAO,gBAAqB,KAAA,IAAA,CAAK,KAAM,CAAA,gBAAA,CAAA;AAAA,KACnE;AAEA,IAAA,KAAA,CAAM,SAAS,MAAM,CAAA,CAAA;AAErB,IAAA,IAAI,uBAAyB,EAAA;AAC3B,MAAA,IAAA,CAAK,YAAa,CAAA,IAAI,8BAA+B,CAAA,IAAI,GAAG,IAAI,CAAA,CAAA;AAAA,KAClE;AAAA,GACF;AAAA,EAOO,aAAA,CACL,SACA,OAIM,EAAA;AACN,IAAA,IAAI,uBAA0B,GAAA,KAAA,CAAA;AAC9B,IAAA,IAAI,gBAAmB,GAAA,KAAA,CAAA,CAAA;AAEvB,IAAA,IAAI,OAAW,IAAA,OAAA,KAAY,IAAK,CAAA,KAAA,CAAM,OAAS,EAAA;AAC7C,MAAA,gBAAA,GAAmB,gBAAiB,CAAA,IAAA,CAAK,KAAM,CAAA,iBAAA,EAAmB,OAAO,CAAA,CAAA;AACzE,MAA0B,uBAAA,GAAA,gBAAA,KAAqB,KAAK,KAAM,CAAA,gBAAA,CAAA;AAAA,KAC5D;AAEA,IAAA,KAAA,CAAM,QAAS,CAAA;AAAA,MACb,OAAA;AAAA,MACA,gBAAA;AAAA,KACD,CAAA,CAAA;AAED,IAAA,IAAK,uBAA2B,IAAA,CAAA,OAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAS,WAAgB,MAAA,IAAA,KAAS,mCAAS,YAAc,CAAA,EAAA;AACvF,MAAA,IAAA,CAAK,YAAa,CAAA,IAAI,8BAA+B,CAAA,IAAI,GAAG,IAAI,CAAA,CAAA;AAAA,KAClE;AAAA,GACF;AAAA,EAEO,QAAsC,GAAA;AAC3C,IAAA,OAAO,KAAK,KAAM,CAAA,gBAAA,CAAA;AAAA,GACpB;AAAA,EAEO,aAAA,CAAc,QAA+B,MAAwC,EAAA;AAC1F,IAAA,MAAM,EAAE,OAAA,EAAS,IAAK,EAAA,GAAI,IAAK,CAAA,KAAA,CAAA;AAE/B,IAAA,IAAI,WAAW,IAAM,EAAA;AAEnB,MAAA,IAAI,OAAW,IAAA,MAAA,IAAU,MAAO,CAAA,OAAA,CAAA,KAAa,EAAI,EAAA;AAC/C,QAAA,IAAA,CAAK,QAAS,CAAA,EAAE,OAAS,EAAA,CAAC,GAAG,OAAA,EAAS,cAAK,CAAA,cAAA,CAAA,EAAA,EAAA,IAAA,CAAA,EAAS,MAAQ,CAAA,CAAA,EAAG,IAAM,EAAA,KAAA,CAAA,EAAW,CAAA,CAAA;AAAA,OAC3E,MAAA;AACL,QAAA,IAAA,CAAK,SAAS,EAAE,IAAA,EAAM,cAAK,CAAA,cAAA,CAAA,EAAA,EAAA,MAAA,CAAA,EAAW,SAAU,CAAA,CAAA;AAAA,OAClD;AACA,MAAA,OAAA;AAAA,KACF;AAEA,IAAA,MAAM,iBAAiB,IAAK,CAAA,KAAA,CAAM,OAAQ,CAAA,GAAA,CAAI,CAAC,CAAM,KAAA;AACnD,MAAA,OAAO,CAAM,KAAA,MAAA,GAAS,cAAK,CAAA,cAAA,CAAA,EAAA,EAAA,CAAA,CAAA,EAAM,MAAW,CAAA,GAAA,CAAA,CAAA;AAAA,KAC7C,CAAA,CAAA;AAED,IAAA,IAAA,CAAK,QAAS,CAAA,EAAE,OAAS,EAAA,cAAA,EAAgB,CAAA,CAAA;AAAA,GAC3C;AAAA,EAEO,cAAc,MAA+B,EAAA;AAClD,IAAI,IAAA,MAAA,KAAW,IAAK,CAAA,KAAA,CAAM,IAAM,EAAA;AAC9B,MAAA,IAAA,CAAK,QAAS,CAAA,EAAE,IAAM,EAAA,KAAA,CAAA,EAAW,CAAA,CAAA;AACjC,MAAA,OAAA;AAAA,KACF;AAEA,IAAA,IAAA,CAAK,QAAS,CAAA,EAAE,OAAS,EAAA,IAAA,CAAK,KAAM,CAAA,OAAA,CAAQ,MAAO,CAAA,CAAC,CAAM,KAAA,CAAA,KAAM,MAAM,CAAA,EAAG,CAAA,CAAA;AAAA,GAC3E;AAAA,EAEO,iBAAoB,GAAA;AACzB,IAAA,MAAM,cAAiB,GAAA,IAAA,CAAK,KAAM,CAAA,OAAA,CAAQ,GAAG,CAAE,CAAA,CAAA,CAAA;AAE/C,IAAA,IAAI,cAAgB,EAAA;AAClB,MAAA,IAAA,CAAK,cAAc,cAAc,CAAA,CAAA;AAAA,KACnC;AAAA,GACF;AAAA,EAEO,yBAAyB,MAA+B,EAAA;AAC7D,IAAI,IAAA,IAAA,CAAK,KAAM,CAAA,OAAA,CAAQ,MAAQ,EAAA;AAE7B,MAAA,IAAI,kBAAqB,GAAA,IAAA,CAAK,KAAM,CAAA,OAAA,CAAQ,MAAS,GAAA,CAAA,CAAA;AAIrD,MAAI,IAAA,MAAA,KAAW,IAAK,CAAA,KAAA,CAAM,IAAM,EAAA;AAC9B,QAAqB,kBAAA,GAAA,CAAA,CAAA,CAAA;AAAA,OACvB;AAEA,MAAA,IAAA,CAAK,QAAS,CAAA;AAAA,QACZ,OAAA,EAAS,KAAK,KAAM,CAAA,OAAA,CAAQ,OAAgC,CAAC,GAAA,EAAK,GAAG,KAAU,KAAA;AAE7E,UAAA,IAAI,UAAU,kBAAoB,EAAA;AAChC,YAAO,OAAA;AAAA,cACL,GAAG,GAAA;AAAA,cACH,iCACK,CADL,CAAA,EAAA;AAAA,gBAEE,SAAW,EAAA,IAAA;AAAA,eACb,CAAA;AAAA,aACF,CAAA;AAAA,WACF;AAEA,UAAA,IAAI,MAAM,MAAQ,EAAA;AAChB,YAAO,OAAA,GAAA,CAAA;AAAA,WACT;AAEA,UAAO,OAAA,CAAC,GAAG,GAAA,EAAK,CAAC,CAAA,CAAA;AAAA,SACnB,EAAG,EAAE,CAAA;AAAA,OACN,CAAA,CAAA;AAAA,KACH;AAAA,GACF;AAAA,EAKA,MAAa,SAAS,UAAoE,EAAA;AA1U5F,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;AA2UI,IAAA,MAAM,WAAW,OAAM,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAM,EAAA,kBAAA,KAAX,4BAAgC,IAAM,EAAA,UAAA,CAAA,CAAA,CAAA;AAE7D,IAAI,IAAA,QAAA,IAAY,SAAS,OAAS,EAAA;AAChC,MAAA,OAAO,gBAAiB,CAAA,QAAA,CAAS,MAAM,CAAA,CAAE,IAAI,iBAAiB,CAAA,CAAA;AAAA,KAChE;AAEA,IAAI,IAAA,IAAA,CAAK,MAAM,WAAa,EAAA;AAC1B,MAAA,OAAO,IAAK,CAAA,KAAA,CAAM,WAAY,CAAA,GAAA,CAAI,iBAAiB,CAAA,CAAA;AAAA,KACrD;AAEA,IAAM,MAAA,EAAA,GAAK,MAAM,IAAK,CAAA,cAAA,CAAe,IAAI,IAAK,CAAA,KAAA,CAAM,UAAY,EAAA,IAAA,CAAK,WAAW,CAAA,CAAA;AAChF,IAAA,IAAI,CAAC,EAAA,IAAM,CAAC,EAAA,CAAG,UAAY,EAAA;AACzB,MAAA,OAAO,EAAC,CAAA;AAAA,KACV;AAEA,IAAA,MAAM,eAAe,IAAK,CAAA,KAAA,CAAM,OAAQ,CAAA,MAAA,CAAO,CAAC,CAAM,KAAA,CAAA,CAAE,GAAQ,KAAA,UAAU,EAAE,MAAO,CAAA,CAAA,EAAA,GAAA,IAAA,CAAK,MAAM,WAAX,KAAA,IAAA,GAAA,EAAA,GAA0B,EAAE,CAAA,CAAA;AAC/G,IAAA,MAAM,SAAY,GAAA,UAAA,CAAW,YAAa,CAAA,IAAI,EAAE,KAAM,CAAA,KAAA,CAAA;AACtD,IAAA,MAAM,UAAU,IAAK,CAAA,KAAA,CAAM,4BAA+B,GAAA,sBAAA,CAAuB,IAAI,CAAI,GAAA,KAAA,CAAA,CAAA;AACzF,IAAM,MAAA,QAAA,GAAW,MAAM,EAAA,CAAG,UAAW,CAAA,cAAA,CAAA;AAAA,MACnC,OAAS,EAAA,YAAA;AAAA,MACT,OAAA;AAAA,MACA,SAAA;AAAA,KACG,EAAA,yBAAA,CAA0B,IAAI,CAClC,CAAA,CAAA,CAAA;AAED,IAAI,IAAA,gBAAA,CAAiB,QAAQ,CAAG,EAAA;AAC9B,MAAA,IAAA,CAAK,SAAS,EAAE,KAAA,EAAO,QAAS,CAAA,KAAA,CAAM,SAAS,CAAA,CAAA;AAAA,KACjD;AAEA,IAAI,IAAA,IAAA,GAAO,iBAAiB,QAAQ,CAAA,CAAA;AACpC,IAAA,IAAI,QAAU,EAAA;AACZ,MAAA,IAAA,GAAO,IAAK,CAAA,MAAA,CAAO,gBAAiB,CAAA,QAAA,CAAS,MAAM,CAAC,CAAA,CAAA;AAAA,KACtD;AAEA,IAAM,MAAA,iBAAA,GAAoB,KAAK,KAAM,CAAA,iBAAA,CAAA;AACrC,IAAA,IAAI,iBAAmB,EAAA;AACrB,MAAO,IAAA,GAAA,IAAA,CAAK,OAAO,CAAC,CAAA,KAAM,EAAE,IAAK,CAAA,KAAA,CAAM,iBAAiB,CAAC,CAAA,CAAA;AAAA,KAC3D;AAEA,IAAO,OAAA,IAAA,CAAK,IAAI,iBAAiB,CAAA,CAAA;AAAA,GACnC;AAAA,EAKA,MAAa,cAAc,MAAwE,EAAA;AAxXrG,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;AAyXI,IAAA,MAAM,WAAW,OAAM,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAM,EAAA,oBAAA,KAAX,4BAAkC,IAAM,EAAA,MAAA,CAAA,CAAA,CAAA;AAE/D,IAAI,IAAA,QAAA,IAAY,SAAS,OAAS,EAAA;AAChC,MAAA,OAAO,gBAAiB,CAAA,QAAA,CAAS,MAAM,CAAA,CAAE,IAAI,iBAAiB,CAAA,CAAA;AAAA,KAChE;AAEA,IAAM,MAAA,EAAA,GAAK,MAAM,IAAK,CAAA,cAAA,CAAe,IAAI,IAAK,CAAA,KAAA,CAAM,UAAY,EAAA,IAAA,CAAK,WAAW,CAAA,CAAA;AAEhF,IAAA,IAAI,CAAC,EAAA,IAAM,CAAC,EAAA,CAAG,YAAc,EAAA;AAC3B,MAAA,OAAO,EAAC,CAAA;AAAA,KACV;AAGA,IAAA,MAAM,eAAe,IAAK,CAAA,KAAA,CAAM,QAAQ,MAAO,CAAA,CAAC,MAAM,CAAE,CAAA,GAAA,KAAQ,MAAO,CAAA,GAAG,EAAE,MAAO,CAAA,CAAA,EAAA,GAAA,IAAA,CAAK,MAAM,WAAX,KAAA,IAAA,GAAA,EAAA,GAA0B,EAAE,CAAA,CAAA;AAE/G,IAAA,MAAM,SAAY,GAAA,UAAA,CAAW,YAAa,CAAA,IAAI,EAAE,KAAM,CAAA,KAAA,CAAA;AACtD,IAAA,MAAM,UAAU,IAAK,CAAA,KAAA,CAAM,4BAA+B,GAAA,sBAAA,CAAuB,IAAI,CAAI,GAAA,KAAA,CAAA,CAAA;AAEzF,IAAM,MAAA,QAAA,GAAW,MAAM,EAAA,CAAG,YAAa,CAAA,cAAA,CAAA;AAAA,MACrC,KAAK,MAAO,CAAA,GAAA;AAAA,MACZ,OAAS,EAAA,YAAA;AAAA,MACT,SAAA;AAAA,MACA,OAAA;AAAA,KACG,EAAA,yBAAA,CAA0B,IAAI,CAClC,CAAA,CAAA,CAAA;AAED,IAAI,IAAA,gBAAA,CAAiB,QAAQ,CAAG,EAAA;AAC9B,MAAA,IAAA,CAAK,SAAS,EAAE,KAAA,EAAO,QAAS,CAAA,KAAA,CAAM,SAAS,CAAA,CAAA;AAAA,KACjD;AAEA,IAAI,IAAA,MAAA,GAAS,iBAAiB,QAAQ,CAAA,CAAA;AACtC,IAAA,IAAI,QAAU,EAAA;AACZ,MAAA,MAAA,GAAS,MAAO,CAAA,MAAA,CAAO,gBAAiB,CAAA,QAAA,CAAS,MAAM,CAAC,CAAA,CAAA;AAAA,KAC1D;AAEA,IAAO,OAAA,MAAA,CAAO,IAAI,iBAAiB,CAAA,CAAA;AAAA,GACrC;AAAA,EAEO,OAAU,GAAA;AACf,IAAA,IAAA,CAAK,QAAS,CAAA;AAAA,MACZ,IAAA,EAAM,EAAE,GAAK,EAAA,EAAA,EAAI,OAAO,EAAI,EAAA,QAAA,EAAU,GAAK,EAAA,SAAA,EAAW,EAAG,EAAA;AAAA,KAC1D,CAAA,CAAA;AAAA,GACH;AAAA,EAEO,aAAgB,GAAA;AACrB,IAAA,MAAM,EAAE,2BAAA,EAA6B,gBAAmB,GAAA,IAAA,KAAS,IAAK,CAAA,KAAA,CAAA;AAEtE,IAAA,OAAO,UAAU,MAAO,CAAA,CAAC,EAAE,OAAA,EAAS,SAAc,KAAA;AAChD,MAAI,IAAA,CAAC,+BAA+B,OAAS,EAAA;AAC3C,QAAO,OAAA,KAAA,CAAA;AAAA,OACT;AACA,MAAI,IAAA,CAAC,oBAAoB,OAAS,EAAA;AAChC,QAAO,OAAA,KAAA,CAAA;AAAA,OACT;AACA,MAAO,OAAA,IAAA,CAAA;AAAA,KACR,CAAE,CAAA,GAAA,CAA6B,CAAC,EAAE,KAAA,EAAO,aAAmB,MAAA;AAAA,MAC3D,KAAO,EAAA,KAAA;AAAA,MACP,KAAA;AAAA,MACA,WAAA;AAAA,KACA,CAAA,CAAA,CAAA;AAAA,GACJ;AACF,CAAA;AAlQa,oBAAA,CAIJ,SAAY,GAAA,4BAAA,CAAA;AAgQrB,SAAS,gBAAA,CACP,SACA,OACA,EAAA;AACA,EAAA,OAAA,CAAQ,OAAW,IAAA,IAAA,GAAA,OAAA,GAAA,4BAAA,EAA8B,OAAW,IAAA,IAAA,GAAA,OAAA,GAAA,EAAE,CAAA,CAAA;AAChE,CAAA;AAEgB,SAAA,4BAAA,CAA6B,EAAE,KAAA,EAAoD,EAAA;AACjG,EAAA,MAAM,EAAE,OAAS,EAAA,QAAA,EAAU,mBAAoB,EAAA,GAAI,MAAM,QAAS,EAAA,CAAA;AAClE,EAAM,MAAA,MAAA,GAAS,WAAW,SAAS,CAAA,CAAA;AAEnC,EAAI,IAAA,KAAA,CAAM,KAAM,CAAA,MAAA,KAAW,UAAY,EAAA;AACrC,IAAA,uBAAQ,KAAA,CAAA,aAAA,CAAA,4BAAA,EAAA;AAAA,MAA6B,KAAA;AAAA,KAAc,CAAA,CAAA;AAAA,GACrD;AAEA,EAAA,uBACG,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA;AAAA,IAAI,WAAW,MAAO,CAAA,OAAA;AAAA,GAAA,EACpB,OACE,CAAA,MAAA,CAAO,CAAC,MAAA,KAAW,CAAC,MAAO,CAAA,MAAM,CACjC,CAAA,GAAA,CAAI,CAAC,MAAA,EAAQ,KACZ,qBAAA,KAAA,CAAA,aAAA,CAAC,MAAM,QAAN,EAAA;AAAA,IAAe,GAAK,EAAA,KAAA;AAAA,GAAA,kBAClB,KAAA,CAAA,aAAA,CAAA,mBAAA,EAAA;AAAA,IAAoB,MAAA;AAAA,IAAgB,KAAA;AAAA,GAAc,CACrD,CACD,CAEF,EAAA,CAAC,4BAAa,KAAA,CAAA,aAAA,CAAA,kBAAA,EAAA;AAAA,IAAmB,KAAA;AAAA,IAAc,GAAI,EAAA,UAAA;AAAA,IAAW,mBAAA;AAAA,GAA0C,CAC3G,CAAA,CAAA;AAEJ,CAAA;AAEA,MAAM,SAAA,GAAY,CAAC,KAA0B,MAAA;AAAA,EAC3C,SAAS,GAAI,CAAA;AAAA,IACX,OAAS,EAAA,MAAA;AAAA,IACT,QAAU,EAAA,MAAA;AAAA,IACV,UAAY,EAAA,UAAA;AAAA,IACZ,SAAA,EAAW,KAAM,CAAA,OAAA,CAAQ,CAAC,CAAA;AAAA,IAC1B,MAAA,EAAQ,KAAM,CAAA,OAAA,CAAQ,CAAC,CAAA;AAAA,GACxB,CAAA;AACH,CAAA,CAAA,CAAA;AAEO,SAAS,kBAAkB,KAAiD,EAAA;AACjF,EAAM,MAAA,EAAE,IAAM,EAAA,KAAA,EAAU,GAAA,KAAA,CAAA;AACxB,EAAA,MAAM,MAAkC,GAAA;AAAA,IAGtC,KAAA,EAAO,OAAO,IAAI,CAAA;AAAA,IAClB,KAAA,EAAO,MAAO,CAAA,KAAA,IAAA,IAAA,GAAA,KAAA,GAAS,IAAI,CAAA;AAAA,GAC7B,CAAA;AAEA,EAAA,IAAI,WAAW,KAAO,EAAA;AACpB,IAAA,MAAA,CAAO,QAAQ,KAAM,CAAA,KAAA,CAAA;AAAA,GACvB;AAEA,EAAA,IAAI,UAAU,KAAO,EAAA;AACnB,IAAA,MAAA,CAAO,OAAO,KAAM,CAAA,IAAA,CAAA;AAAA,GACtB;AAEA,EAAO,OAAA,MAAA,CAAA;AACT,CAAA;AAEO,SAAS,iBAAiB,MAAwC,EAAA;AACvE,EAAA,OAAO,OAAO,GAAQ,KAAA,EAAA,IAAM,OAAO,QAAa,KAAA,EAAA,IAAM,OAAO,KAAU,KAAA,EAAA,CAAA;AACzE,CAAA;AAEO,SAAS,qBAAqB,aAAgC,EAAA;AACnE,EAAA,MAAM,WAAW,SAAU,CAAA,IAAA,CAAK,CAAC,CAAM,KAAA,CAAA,CAAE,UAAU,aAAa,CAAA,CAAA;AAChE,EAAA,IAAI,CAAC,QAAU,EAAA;AAEb,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AACA,EAAO,OAAA,OAAA,CAAQ,SAAS,OAAO,CAAA,CAAA;AACjC;;;;"}
1
+ {"version":3,"file":"AdHocFiltersVariable.js","sources":["../../../../src/variables/adhoc/AdHocFiltersVariable.tsx"],"sourcesContent":["import React from 'react';\nimport { AdHocVariableFilter, GetTagResponse, GrafanaTheme2, MetricFindValue, SelectableValue } from '@grafana/data';\nimport { SceneObjectBase } from '../../core/SceneObjectBase';\nimport { SceneVariable, SceneVariableState, SceneVariableValueChangedEvent, VariableValue } from '../types';\nimport { ControlsLayout, SceneComponentProps } from '../../core/types';\nimport { DataSourceRef } from '@grafana/schema';\nimport { dataFromResponse, getQueriesForVariables, renderPrometheusLabelFilters, responseHasError } from '../utils';\nimport { patchGetAdhocFilters } from './patchGetAdhocFilters';\nimport { useStyles2 } from '@grafana/ui';\nimport { sceneGraph } from '../../core/sceneGraph';\nimport { AdHocFilterBuilder } from './AdHocFilterBuilder';\nimport { AdHocFilterRenderer } from './AdHocFilterRenderer';\nimport { getDataSourceSrv } from '@grafana/runtime';\nimport { AdHocFiltersVariableUrlSyncHandler } from './AdHocFiltersVariableUrlSyncHandler';\nimport { css } from '@emotion/css';\nimport { getEnrichedFiltersRequest } from '../getEnrichedFiltersRequest';\nimport { AdHocFiltersComboboxRenderer } from './AdHocFiltersCombobox/AdHocFiltersComboboxRenderer';\nimport { wrapInSafeSerializableSceneObject } from '../../utils/wrapInSafeSerializableSceneObject';\n\nexport interface AdHocFilterWithLabels<M extends Record<string, any> = {}> extends AdHocVariableFilter {\n keyLabel?: string;\n valueLabels?: string[];\n // this is used to externally trigger edit mode in combobox filter UI\n forceEdit?: boolean;\n // hide the filter from AdHocFiltersVariableRenderer and the URL\n hidden?: boolean;\n meta?: M;\n // filter source, it can be either scopes, dashboards or undefined,\n // which means it won't appear in the UI\n source?: FilterSource;\n}\n\nexport type AdHocControlsLayout = ControlsLayout | 'combobox';\n\nexport enum FilterSource {\n Scopes = 'scopes',\n Dashboards = 'dashboards',\n}\n\nexport interface AdHocFiltersVariableState extends SceneVariableState {\n /** Optional text to display on the 'add filter' button */\n addFilterButtonText?: string;\n /** The visible filters */\n filters: AdHocFilterWithLabels[];\n /** Base filters to always apply when looking up keys*/\n baseFilters?: AdHocFilterWithLabels[];\n /** Datasource to use for getTagKeys and getTagValues and also controls which scene queries the filters should apply to */\n datasource: DataSourceRef | null;\n /** Controls if the filters can be changed */\n readOnly?: boolean;\n /**\n * @experimental\n * Controls the layout and design of the label.\n */\n layout?: AdHocControlsLayout;\n /**\n * Defaults to automatic which means filters will automatically be applied to all queries with the same data source as this AdHocFilterSet.\n * In manual mode you either have to use the filters programmatically or as a variable inside query expressions.\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 * Extension hook for customizing the value 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 getTagValuesProvider?: getTagValuesProvider;\n\n /**\n * Optionally provide an array of static keys that override getTagKeys\n */\n defaultKeys?: MetricFindValue[];\n\n /**\n * This is the expression that the filters resulted in. Defaults to\n * Prometheus / Loki compatible label filter expression\n */\n filterExpression?: string;\n\n /**\n * The default builder creates a Prometheus/Loki compatible filter expression,\n * this can be overridden to create a different expression based on the current filters.\n */\n expressionBuilder?: AdHocVariableExpressionBuilderFn;\n\n /**\n * Whether the filter supports new multi-value operators like =| and !=|\n */\n supportsMultiValueOperators?: boolean;\n\n /**\n * When querying the datasource for label names and values to determine keys and values\n * for this ad hoc filter, consider the queries in the scene and use them as a filter.\n * This queries filter can be used to ensure that only ad hoc filter options that would\n * impact the current queries are presented to the user.\n */\n useQueriesAsFilterForOptions?: boolean;\n\n /**\n * Flag that decides whether custom values can be added to the filter\n */\n allowCustomValue?: boolean;\n\n /**\n * @internal state of the new filter being added\n */\n _wip?: AdHocFilterWithLabels;\n\n /**\n * Allows custom formatting of a value before saving to filter state\n */\n onAddCustomValue?: OnAddCustomValueFn;\n}\n\nexport type AdHocVariableExpressionBuilderFn = (filters: AdHocFilterWithLabels[]) => string;\nexport type OnAddCustomValueFn = (\n item: SelectableValue<string> & { isCustom?: boolean },\n filter: AdHocFilterWithLabels\n) => { value: string | undefined; valueLabels: string[] };\n\nexport type getTagKeysProvider = (\n variable: AdHocFiltersVariable,\n currentKey: string | null,\n operators?: OperatorDefinition[]\n) => Promise<{ replace?: boolean; values: GetTagResponse | MetricFindValue[] }>;\n\nexport type getTagValuesProvider = (\n variable: AdHocFiltersVariable,\n filter: AdHocFilterWithLabels\n) => Promise<{ replace?: boolean; values: GetTagResponse | MetricFindValue[] }>;\n\nexport type AdHocFiltersVariableCreateHelperArgs = AdHocFiltersVariableState;\n\nexport type OperatorDefinition = {\n value: string;\n description?: string;\n isMulti?: Boolean;\n isRegex?: Boolean;\n};\n\nexport const OPERATORS: OperatorDefinition[] = [\n {\n value: '=',\n description: 'Equals',\n },\n {\n value: '!=',\n description: 'Not equal',\n },\n {\n value: '=|',\n description: 'One of. Use to filter on multiple values.',\n isMulti: true,\n },\n {\n value: '!=|',\n description: 'Not one of. Use to exclude multiple values.',\n isMulti: true,\n },\n {\n value: '=~',\n description: 'Matches regex',\n isRegex: true,\n },\n {\n value: '!~',\n description: 'Does not match regex',\n isRegex: true,\n },\n {\n value: '<',\n description: 'Less than',\n },\n {\n value: '>',\n description: 'Greater than',\n },\n];\n\nexport class AdHocFiltersVariable\n extends SceneObjectBase<AdHocFiltersVariableState>\n implements SceneVariable<AdHocFiltersVariableState>\n{\n static Component = AdHocFiltersVariableRenderer;\n\n private _scopedVars = { __sceneObject: wrapInSafeSerializableSceneObject(this) };\n private _dataSourceSrv = getDataSourceSrv();\n\n protected _urlSync = new AdHocFiltersVariableUrlSyncHandler(this);\n\n public constructor(state: Partial<AdHocFiltersVariableState>) {\n super({\n type: 'adhoc',\n name: state.name ?? 'Filters',\n filters: [],\n datasource: null,\n applyMode: 'auto',\n filterExpression: state.filterExpression ?? renderExpression(state.expressionBuilder, state.filters),\n ...state,\n });\n\n if (this.state.applyMode === 'auto') {\n patchGetAdhocFilters(this);\n }\n }\n\n public setState(update: Partial<AdHocFiltersVariableState>): void {\n let filterExpressionChanged = false;\n\n if (update.filters && update.filters !== this.state.filters && !update.filterExpression) {\n update.filterExpression = renderExpression(this.state.expressionBuilder, update.filters);\n filterExpressionChanged = update.filterExpression !== this.state.filterExpression;\n }\n\n super.setState(update);\n\n if (filterExpressionChanged) {\n this.publishEvent(new SceneVariableValueChangedEvent(this), true);\n }\n }\n\n /**\n * Updates the variable's `filters` and `filterExpression` state.\n * If `skipPublish` option is true, this will not emit the `SceneVariableValueChangedEvent`,\n * allowing consumers to update the filters without triggering dependent data providers.\n */\n public updateFilters(\n filters: AdHocFilterWithLabels[],\n options?: {\n skipPublish?: boolean;\n forcePublish?: boolean;\n }\n ): void {\n let filterExpressionChanged = false;\n let filterExpression: string | undefined = undefined;\n\n if (filters && filters !== this.state.filters) {\n filterExpression = renderExpression(this.state.expressionBuilder, filters);\n filterExpressionChanged = filterExpression !== this.state.filterExpression;\n }\n\n super.setState({\n filters,\n filterExpression,\n });\n\n if ((filterExpressionChanged && options?.skipPublish !== true) || options?.forcePublish) {\n this.publishEvent(new SceneVariableValueChangedEvent(this), true);\n }\n }\n\n public getValue(): VariableValue | undefined {\n return this.state.filterExpression;\n }\n\n public _updateFilter(filter: AdHocFilterWithLabels, update: Partial<AdHocFilterWithLabels>) {\n const { filters, _wip } = this.state;\n\n if (filter === _wip) {\n // If we set value we are done with this \"work in progress\" filter and we can add it\n if ('value' in update && update['value'] !== '') {\n this.setState({ filters: [...filters, { ..._wip, ...update }], _wip: undefined });\n } else {\n this.setState({ _wip: { ...filter, ...update } });\n }\n return;\n }\n\n const updatedFilters = this.state.filters.map((f) => {\n return f === filter ? { ...f, ...update } : f;\n });\n\n this.setState({ filters: updatedFilters });\n }\n\n public _removeFilter(filter: AdHocFilterWithLabels) {\n if (filter === this.state._wip) {\n this.setState({ _wip: undefined });\n return;\n }\n\n this.setState({ filters: this.state.filters.filter((f) => f !== filter) });\n }\n\n public _removeLastFilter() {\n const filterToRemove = this.state.filters.at(-1);\n\n if (filterToRemove) {\n this._removeFilter(filterToRemove);\n }\n }\n\n public _handleComboboxBackspace(filter: AdHocFilterWithLabels) {\n if (this.state.filters.length) {\n // default forceEdit last filter (when triggering from wip filter)\n let filterToForceIndex = this.state.filters.length - 1;\n\n // adjust filterToForceIndex index to -1 if backspace triggered from non wip filter\n // to avoid triggering forceEdit logic\n if (filter !== this.state._wip) {\n filterToForceIndex = -1;\n }\n\n this.setState({\n filters: this.state.filters.reduce<AdHocFilterWithLabels[]>((acc, f, index) => {\n // adjust forceEdit of preceding filter\n if (index === filterToForceIndex) {\n return [\n ...acc,\n {\n ...f,\n forceEdit: true,\n },\n ];\n }\n // remove current filter\n if (f === filter) {\n return acc;\n }\n\n return [...acc, f];\n }, []),\n });\n }\n }\n\n /**\n * Get possible keys given current filters. Do not call from plugins directly\n */\n public async _getKeys(currentKey: string | null): Promise<Array<SelectableValue<string>>> {\n const override = await this.state.getTagKeysProvider?.(this, currentKey);\n\n if (override && override.replace) {\n return dataFromResponse(override.values).map(toSelectableValue);\n }\n\n if (this.state.defaultKeys) {\n return this.state.defaultKeys.map(toSelectableValue);\n }\n\n const ds = await this._dataSourceSrv.get(this.state.datasource, this._scopedVars);\n if (!ds || !ds.getTagKeys) {\n return [];\n }\n\n const otherFilters = this.state.filters.filter((f) => f.key !== currentKey).concat(this.state.baseFilters ?? []);\n const timeRange = sceneGraph.getTimeRange(this).state.value;\n const queries = this.state.useQueriesAsFilterForOptions ? getQueriesForVariables(this) : undefined;\n const response = await ds.getTagKeys({\n filters: otherFilters,\n queries,\n timeRange,\n ...getEnrichedFiltersRequest(this),\n });\n\n if (responseHasError(response)) {\n this.setState({ error: response.error.message });\n }\n\n let keys = dataFromResponse(response);\n if (override) {\n keys = keys.concat(dataFromResponse(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.map(toSelectableValue);\n }\n\n /**\n * Get possible key values for a specific key given current filters. Do not call from plugins directly\n */\n public async _getValuesFor(filter: AdHocFilterWithLabels): Promise<Array<SelectableValue<string>>> {\n const override = await this.state.getTagValuesProvider?.(this, filter);\n\n if (override && override.replace) {\n return dataFromResponse(override.values).map(toSelectableValue);\n }\n\n const ds = await this._dataSourceSrv.get(this.state.datasource, this._scopedVars);\n\n if (!ds || !ds.getTagValues) {\n return [];\n }\n\n // Filter out the current filter key from the list of all filters\n const otherFilters = this.state.filters.filter((f) => f.key !== filter.key).concat(this.state.baseFilters ?? []);\n\n const timeRange = sceneGraph.getTimeRange(this).state.value;\n const queries = this.state.useQueriesAsFilterForOptions ? getQueriesForVariables(this) : undefined;\n\n const response = await ds.getTagValues({\n key: filter.key,\n filters: otherFilters,\n timeRange,\n queries,\n ...getEnrichedFiltersRequest(this),\n });\n\n if (responseHasError(response)) {\n this.setState({ error: response.error.message });\n }\n\n let values = dataFromResponse(response);\n if (override) {\n values = values.concat(dataFromResponse(override.values));\n }\n\n return values.map(toSelectableValue);\n }\n\n public _addWip() {\n this.setState({\n _wip: { key: '', value: '', operator: '=', condition: '' },\n });\n }\n\n public _getOperators() {\n const { supportsMultiValueOperators, allowCustomValue = true } = this.state;\n\n return OPERATORS.filter(({ isMulti, isRegex }) => {\n if (!supportsMultiValueOperators && isMulti) {\n return false;\n }\n if (!allowCustomValue && isRegex) {\n return false;\n }\n return true;\n }).map<SelectableValue<string>>(({ value, description }) => ({\n label: value,\n value,\n description,\n }));\n }\n}\n\nfunction renderExpression(\n builder: AdHocVariableExpressionBuilderFn | undefined,\n filters: AdHocFilterWithLabels[] | undefined\n) {\n return (builder ?? renderPrometheusLabelFilters)(filters ?? []);\n}\n\nexport function AdHocFiltersVariableRenderer({ model }: SceneComponentProps<AdHocFiltersVariable>) {\n const { filters, readOnly, addFilterButtonText } = model.useState();\n const styles = useStyles2(getStyles);\n\n if (model.state.layout === 'combobox') {\n return <AdHocFiltersComboboxRenderer model={model} />;\n }\n\n return (\n <div className={styles.wrapper}>\n {filters\n .filter((filter) => !filter.hidden)\n .map((filter, index) => (\n <React.Fragment key={index}>\n <AdHocFilterRenderer filter={filter} model={model} />\n </React.Fragment>\n ))}\n\n {!readOnly && <AdHocFilterBuilder model={model} key=\"'builder\" addFilterButtonText={addFilterButtonText} />}\n </div>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n wrapper: css({\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'flex-end',\n columnGap: theme.spacing(2),\n rowGap: theme.spacing(1),\n }),\n});\n\nexport function toSelectableValue(input: MetricFindValue): SelectableValue<string> {\n const { text, value } = input;\n const result: SelectableValue<string> = {\n // converting text to string due to some edge cases where it can be a number\n // TODO: remove once https://github.com/grafana/grafana/issues/99021 is closed\n label: String(text),\n value: String(value ?? text),\n };\n\n if ('group' in input) {\n result.group = input.group;\n }\n\n if ('meta' in input) {\n result.meta = input.meta;\n }\n\n return result;\n}\n\nexport function isFilterComplete(filter: AdHocFilterWithLabels): boolean {\n return filter.key !== '' && filter.operator !== '' && filter.value !== '';\n}\n\nexport function isMultiValueOperator(operatorValue: string): boolean {\n const operator = OPERATORS.find((o) => o.value === operatorValue);\n if (!operator) {\n // default to false if operator is not found\n return false;\n }\n return Boolean(operator.isMulti);\n}\n"],"names":["FilterSource"],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -821,8 +821,13 @@ interface AdHocFilterWithLabels<M extends Record<string, any> = {}> extends AdHo
821
821
  forceEdit?: boolean;
822
822
  hidden?: boolean;
823
823
  meta?: M;
824
+ source?: FilterSource;
824
825
  }
825
826
  type AdHocControlsLayout = ControlsLayout | 'combobox';
827
+ declare enum FilterSource {
828
+ Scopes = "scopes",
829
+ Dashboards = "dashboards"
830
+ }
826
831
  interface AdHocFiltersVariableState extends SceneVariableState {
827
832
  /** Optional text to display on the 'add filter' button */
828
833
  addFilterButtonText?: string;
@@ -2927,4 +2932,4 @@ declare const sceneUtils: {
2927
2932
  isGroupByVariable: typeof isGroupByVariable;
2928
2933
  };
2929
2934
 
2930
- export { AdHocFilterWithLabels, AdHocFiltersVariable, CancelActivationHandler, ConstantVariable, ControlsLabel, ControlsLayout, CustomFormatterVariable, CustomTransformOperator, CustomTransformerDefinition, CustomVariable, CustomVariableValue, DataLayerFilter, DataProviderProxy, DataRequestEnricher, DataSourceVariable, DeepPartial, EmbeddedScene, EmbeddedSceneState, ExtraQueryDataProcessor, ExtraQueryDescriptor, ExtraQueryProvider, FieldConfigBuilder, FieldConfigBuilders, FieldConfigOverridesBuilder, FiltersRequestEnricher, FormatVariable, GroupByVariable, InterpolationFormatParameter, IntervalVariable, LazyLoader, LocalValueVariable, MacroVariableConstructor, MultiValueVariable, MultiValueVariableState, NestedScene, NewSceneObjectAddedEvent, PanelBuilders, PanelOptionsBuilders, QueryRunnerState, QueryVariable, RuntimeDataSource, SafeSerializableSceneObject, SceneActivationHandler, SceneApp, SceneAppDrilldownView, SceneAppPage, SceneAppPageLike, SceneAppPageState, SceneAppRoute, SceneByFrameRepeater, SceneByVariableRepeater, SceneCSSGridItem, SceneCSSGridLayout, SceneCanvasText, SceneComponent, SceneComponentProps, SceneControlsSpacer, SceneDataLayerBase, SceneDataLayerControls, SceneDataLayerProvider, SceneDataLayerProviderState, SceneDataLayerSet, SceneDataLayerSetBase, SceneDataNode, SceneDataProvider, SceneDataProviderResult, SceneDataQuery, SceneDataState, SceneDataTransformer, SceneDataTransformerState, SceneDeactivationHandler, SceneDebugger, SceneFlexItem, SceneFlexItemLike, SceneFlexItemState, SceneFlexLayout, SceneGridItem, SceneGridItemLike, SceneGridItemStateLike, SceneGridLayout, SceneGridLayoutDragStartEvent, SceneGridRow, SceneInteractionProfileEvent, SceneLayout, SceneLayoutChildOptions, SceneLayoutState, SceneObject, SceneObjectBase, SceneObjectRef, SceneObjectState, SceneObjectStateChangedEvent, SceneObjectStateChangedPayload, SceneObjectUrlSyncConfig, SceneObjectUrlSyncHandler, SceneObjectUrlValue, SceneObjectUrlValues, SceneObjectWithUrlSync, SceneQueryControllerEntry, SceneQueryControllerEntryType, SceneQueryControllerLike, SceneQueryRunner, SceneReactObject, SceneRefreshPicker, SceneRefreshPickerState, SceneRouteMatch, SceneStateChangedHandler, SceneStatelessBehavior, SceneTimePicker, SceneTimeRange, SceneTimeRangeCompare, SceneTimeRangeLike, SceneTimeRangeState, SceneTimeRangeTransformerBase, SceneTimeZoneOverride, SceneToolbarButton, SceneToolbarInput, SceneUrlSyncOptions, SceneVariable, SceneVariableDependencyConfigLike, SceneVariableSet, SceneVariableSetState, SceneVariableState, SceneVariableValueChangedEvent, SceneVariables, SplitLayout, TestVariable, TextBoxVariable, UrlSyncContextProvider, UrlSyncManager, UrlSyncManagerLike, UseStateHookOptions, UserActionEvent, ValidateAndUpdateResult, VariableCustomFormatterFn, VariableDependencyConfig, VariableGetOptionsArgs, VariableValue, VariableValueControl, VariableValueOption, VariableValueSelectWrapper, VariableValueSelectors, VariableValueSingle, VizConfig, VizConfigBuilder, VizConfigBuilders, VizPanel, VizPanelBuilder, VizPanelExploreButton, VizPanelMenu, VizPanelState, index$1 as behaviors, index as dataLayers, formatRegistry, getExploreURL, isCustomVariableValue, isDataLayer, isDataRequestEnricher, isFiltersRequestEnricher, isSceneObject, registerQueryWithController, registerRuntimeDataSource, renderSelectForVariable, sceneGraph, sceneUtils, useSceneApp, useSceneObjectState, useUrlSync };
2935
+ export { AdHocFilterWithLabels, AdHocFiltersVariable, CancelActivationHandler, ConstantVariable, ControlsLabel, ControlsLayout, CustomFormatterVariable, CustomTransformOperator, CustomTransformerDefinition, CustomVariable, CustomVariableValue, DataLayerFilter, DataProviderProxy, DataRequestEnricher, DataSourceVariable, DeepPartial, EmbeddedScene, EmbeddedSceneState, ExtraQueryDataProcessor, ExtraQueryDescriptor, ExtraQueryProvider, FieldConfigBuilder, FieldConfigBuilders, FieldConfigOverridesBuilder, FilterSource, FiltersRequestEnricher, FormatVariable, GroupByVariable, InterpolationFormatParameter, IntervalVariable, LazyLoader, LocalValueVariable, MacroVariableConstructor, MultiValueVariable, MultiValueVariableState, NestedScene, NewSceneObjectAddedEvent, PanelBuilders, PanelOptionsBuilders, QueryRunnerState, QueryVariable, RuntimeDataSource, SafeSerializableSceneObject, SceneActivationHandler, SceneApp, SceneAppDrilldownView, SceneAppPage, SceneAppPageLike, SceneAppPageState, SceneAppRoute, SceneByFrameRepeater, SceneByVariableRepeater, SceneCSSGridItem, SceneCSSGridLayout, SceneCanvasText, SceneComponent, SceneComponentProps, SceneControlsSpacer, SceneDataLayerBase, SceneDataLayerControls, SceneDataLayerProvider, SceneDataLayerProviderState, SceneDataLayerSet, SceneDataLayerSetBase, SceneDataNode, SceneDataProvider, SceneDataProviderResult, SceneDataQuery, SceneDataState, SceneDataTransformer, SceneDataTransformerState, SceneDeactivationHandler, SceneDebugger, SceneFlexItem, SceneFlexItemLike, SceneFlexItemState, SceneFlexLayout, SceneGridItem, SceneGridItemLike, SceneGridItemStateLike, SceneGridLayout, SceneGridLayoutDragStartEvent, SceneGridRow, SceneInteractionProfileEvent, SceneLayout, SceneLayoutChildOptions, SceneLayoutState, SceneObject, SceneObjectBase, SceneObjectRef, SceneObjectState, SceneObjectStateChangedEvent, SceneObjectStateChangedPayload, SceneObjectUrlSyncConfig, SceneObjectUrlSyncHandler, SceneObjectUrlValue, SceneObjectUrlValues, SceneObjectWithUrlSync, SceneQueryControllerEntry, SceneQueryControllerEntryType, SceneQueryControllerLike, SceneQueryRunner, SceneReactObject, SceneRefreshPicker, SceneRefreshPickerState, SceneRouteMatch, SceneStateChangedHandler, SceneStatelessBehavior, SceneTimePicker, SceneTimeRange, SceneTimeRangeCompare, SceneTimeRangeLike, SceneTimeRangeState, SceneTimeRangeTransformerBase, SceneTimeZoneOverride, SceneToolbarButton, SceneToolbarInput, SceneUrlSyncOptions, SceneVariable, SceneVariableDependencyConfigLike, SceneVariableSet, SceneVariableSetState, SceneVariableState, SceneVariableValueChangedEvent, SceneVariables, SplitLayout, TestVariable, TextBoxVariable, UrlSyncContextProvider, UrlSyncManager, UrlSyncManagerLike, UseStateHookOptions, UserActionEvent, ValidateAndUpdateResult, VariableCustomFormatterFn, VariableDependencyConfig, VariableGetOptionsArgs, VariableValue, VariableValueControl, VariableValueOption, VariableValueSelectWrapper, VariableValueSelectors, VariableValueSingle, VizConfig, VizConfigBuilder, VizConfigBuilders, VizPanel, VizPanelBuilder, VizPanelExploreButton, VizPanelMenu, VizPanelState, index$1 as behaviors, index as dataLayers, formatRegistry, getExploreURL, isCustomVariableValue, isDataLayer, isDataRequestEnricher, isFiltersRequestEnricher, isSceneObject, registerQueryWithController, registerRuntimeDataSource, renderSelectForVariable, sceneGraph, sceneUtils, useSceneApp, useSceneObjectState, useUrlSync };
package/dist/index.js CHANGED
@@ -5104,6 +5104,7 @@ var __spreadValues$A = (a, b) => {
5104
5104
  return a;
5105
5105
  };
5106
5106
  var __spreadProps$o = (a, b) => __defProps$o(a, __getOwnPropDescs$o(b));
5107
+ const LABEL_MAX_VISIBLE_LENGTH = 20;
5107
5108
  function AdHocFilterPill({ filter, model, readOnly, focusOnWipInputRef }) {
5108
5109
  var _a, _b, _c;
5109
5110
  const styles = ui.useStyles2(getStyles$b);
@@ -5116,13 +5117,13 @@ function AdHocFilterPill({ filter, model, readOnly, focusOnWipInputRef }) {
5116
5117
  const handleChangeViewMode = React.useCallback(
5117
5118
  (event, shouldFocusOnPillWrapperOverride) => {
5118
5119
  event == null ? void 0 : event.stopPropagation();
5119
- if (readOnly) {
5120
+ if (readOnly || filter.source) {
5120
5121
  return;
5121
5122
  }
5122
5123
  setShouldFocusOnPillWrapper(shouldFocusOnPillWrapperOverride != null ? shouldFocusOnPillWrapperOverride : !viewMode);
5123
5124
  setViewMode(!viewMode);
5124
5125
  },
5125
- [readOnly, viewMode]
5126
+ [readOnly, viewMode, filter.source]
5126
5127
  );
5127
5128
  React.useEffect(() => {
5128
5129
  var _a2;
@@ -5147,7 +5148,7 @@ function AdHocFilterPill({ filter, model, readOnly, focusOnWipInputRef }) {
5147
5148
  className: styles.pillText
5148
5149
  }, keyLabel, " ", filter.operator, " ", valueLabel);
5149
5150
  return /* @__PURE__ */ React__default["default"].createElement("div", {
5150
- className: css.cx(styles.combinedFilterPill, { [styles.readOnlyCombinedFilter]: readOnly }),
5151
+ className: css.cx(styles.combinedFilterPill, readOnly && styles.readOnlyCombinedFilter),
5151
5152
  onClick: (e) => {
5152
5153
  e.stopPropagation();
5153
5154
  setPopulateInputOnEdit(true);
@@ -5163,12 +5164,12 @@ function AdHocFilterPill({ filter, model, readOnly, focusOnWipInputRef }) {
5163
5164
  "aria-label": `Edit filter with key ${keyLabel}`,
5164
5165
  tabIndex: 0,
5165
5166
  ref: pillWrapperRef
5166
- }, valueLabel.length < 20 ? pillText : /* @__PURE__ */ React__default["default"].createElement(ui.Tooltip, {
5167
+ }, valueLabel.length < LABEL_MAX_VISIBLE_LENGTH ? pillText : /* @__PURE__ */ React__default["default"].createElement(ui.Tooltip, {
5167
5168
  content: /* @__PURE__ */ React__default["default"].createElement("div", {
5168
5169
  className: styles.tooltipText
5169
5170
  }, valueLabel),
5170
5171
  placement: "top"
5171
- }, pillText), !readOnly ? /* @__PURE__ */ React__default["default"].createElement(ui.IconButton, {
5172
+ }, pillText), !readOnly && !filter.source ? /* @__PURE__ */ React__default["default"].createElement(ui.IconButton, {
5172
5173
  onClick: (e) => {
5173
5174
  e.stopPropagation();
5174
5175
  model._removeFilter(filter);
@@ -5184,9 +5185,14 @@ function AdHocFilterPill({ filter, model, readOnly, focusOnWipInputRef }) {
5184
5185
  },
5185
5186
  name: "times",
5186
5187
  size: "md",
5187
- className: styles.removeButton,
5188
+ className: styles.pillIcon,
5188
5189
  tooltip: `Remove filter with key ${keyLabel}`
5189
- }) : null);
5190
+ }) : null, filter.source && /* @__PURE__ */ React__default["default"].createElement(ui.IconButton, {
5191
+ name: "info-circle",
5192
+ size: "md",
5193
+ className: styles.pillIcon,
5194
+ tooltip: `This is a ${filter.source} injected filter`
5195
+ }));
5190
5196
  }
5191
5197
  return /* @__PURE__ */ React__default["default"].createElement(AdHocCombobox, {
5192
5198
  filter,
@@ -5222,7 +5228,7 @@ const getStyles$b = (theme) => ({
5222
5228
  background: theme.colors.action.selected
5223
5229
  }
5224
5230
  }),
5225
- removeButton: css.css({
5231
+ pillIcon: css.css({
5226
5232
  marginInline: theme.spacing(0.5),
5227
5233
  cursor: "pointer",
5228
5234
  "&:hover": {
@@ -5256,7 +5262,7 @@ const AdHocFiltersAlwaysWipCombobox = React.forwardRef(function AdHocFiltersAlwa
5256
5262
  });
5257
5263
 
5258
5264
  const AdHocFiltersComboboxRenderer = React.memo(function AdHocFiltersComboboxRenderer2({ model }) {
5259
- const { filters, readOnly } = model.useState();
5265
+ const { baseFilters, filters, readOnly } = model.useState();
5260
5266
  const styles = ui.useStyles2(getStyles$a);
5261
5267
  const focusOnWipInputRef = React.useRef();
5262
5268
  return /* @__PURE__ */ React__default["default"].createElement("div", {
@@ -5269,7 +5275,14 @@ const AdHocFiltersComboboxRenderer = React.memo(function AdHocFiltersComboboxRen
5269
5275
  name: "filter",
5270
5276
  className: styles.filterIcon,
5271
5277
  size: "lg"
5272
- }), filters.map((filter, index) => /* @__PURE__ */ React__default["default"].createElement(AdHocFilterPill, {
5278
+ }), baseFilters == null ? void 0 : baseFilters.map(
5279
+ (filter, index) => filter.source ? /* @__PURE__ */ React__default["default"].createElement(AdHocFilterPill, {
5280
+ key: `${index}-${filter.key}`,
5281
+ filter,
5282
+ model,
5283
+ focusOnWipInputRef: focusOnWipInputRef.current
5284
+ }) : null
5285
+ ), filters.map((filter, index) => /* @__PURE__ */ React__default["default"].createElement(AdHocFilterPill, {
5273
5286
  key: `${index}-${filter.key}`,
5274
5287
  filter,
5275
5288
  model,
@@ -5331,6 +5344,11 @@ var __spreadValues$z = (a, b) => {
5331
5344
  return a;
5332
5345
  };
5333
5346
  var __spreadProps$n = (a, b) => __defProps$n(a, __getOwnPropDescs$n(b));
5347
+ var FilterSource = /* @__PURE__ */ ((FilterSource2) => {
5348
+ FilterSource2["Scopes"] = "scopes";
5349
+ FilterSource2["Dashboards"] = "dashboards";
5350
+ return FilterSource2;
5351
+ })(FilterSource || {});
5334
5352
  const OPERATORS = [
5335
5353
  {
5336
5354
  value: "=",
@@ -5963,7 +5981,7 @@ class SceneQueryRunner extends SceneObjectBase {
5963
5981
  return clone;
5964
5982
  }
5965
5983
  prepareRequests(timeRange, ds) {
5966
- var _a;
5984
+ var _a, _b;
5967
5985
  const { minInterval, queries } = this.state;
5968
5986
  let request = __spreadValues$y({
5969
5987
  app: "scenes",
@@ -5985,7 +6003,12 @@ class SceneQueryRunner extends SceneObjectBase {
5985
6003
  queryCachingTTL: this.state.queryCachingTTL
5986
6004
  }, getEnrichedDataRequest(this));
5987
6005
  if (this._adhocFiltersVar) {
5988
- request.filters = this._adhocFiltersVar.state.filters.filter(isFilterComplete);
6006
+ request.filters = [];
6007
+ if ((_a = this._adhocFiltersVar.state.baseFilters) == null ? void 0 : _a.length) {
6008
+ const injectedBaseFilters = this._adhocFiltersVar.state.baseFilters.filter((filter) => filter.source);
6009
+ request.filters = request.filters.concat(injectedBaseFilters);
6010
+ }
6011
+ request.filters = request.filters.concat(this._adhocFiltersVar.state.filters.filter(isFilterComplete));
5989
6012
  }
5990
6013
  if (this._groupByVar) {
5991
6014
  request.groupByKeys = this._groupByVar.state.value;
@@ -6008,7 +6031,7 @@ class SceneQueryRunner extends SceneObjectBase {
6008
6031
  const primaryTimeRange = timeRange.state.value;
6009
6032
  let secondaryRequests = [];
6010
6033
  let secondaryProcessors = /* @__PURE__ */ new Map();
6011
- for (const provider of (_a = this.getClosestExtraQueryProviders()) != null ? _a : []) {
6034
+ for (const provider of (_b = this.getClosestExtraQueryProviders()) != null ? _b : []) {
6012
6035
  for (const { req, processor } of provider.getExtraQueries(request)) {
6013
6036
  const requestId = getNextRequestId$1();
6014
6037
  secondaryRequests.push(__spreadProps$m(__spreadValues$y({}, req), { requestId }));
@@ -14192,6 +14215,7 @@ exports.EmbeddedScene = EmbeddedScene;
14192
14215
  exports.FieldConfigBuilder = FieldConfigBuilder;
14193
14216
  exports.FieldConfigBuilders = FieldConfigBuilders;
14194
14217
  exports.FieldConfigOverridesBuilder = FieldConfigOverridesBuilder;
14218
+ exports.FilterSource = FilterSource;
14195
14219
  exports.GroupByVariable = GroupByVariable;
14196
14220
  exports.IntervalVariable = IntervalVariable;
14197
14221
  exports.LazyLoader = LazyLoader;