@grafana/scenes 6.1.2--canary.967.13496758912.0 → 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.
- package/dist/esm/core/sceneGraph/utils.js +4 -8
- package/dist/esm/core/sceneGraph/utils.js.map +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/querying/SceneQueryRunner.js +8 -3
- package/dist/esm/querying/SceneQueryRunner.js.map +1 -1
- package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFilterPill.js +14 -8
- package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFilterPill.js.map +1 -1
- package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersComboboxRenderer.js +9 -2
- package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersComboboxRenderer.js.map +1 -1
- package/dist/esm/variables/adhoc/AdHocFiltersVariable.js +6 -1
- package/dist/esm/variables/adhoc/AdHocFiltersVariable.js.map +1 -1
- package/dist/index.d.ts +6 -1
- package/dist/index.js +41 -20
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
|
@@ -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":"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"}
|
|
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
|
@@ -537,26 +537,23 @@ function cloneSceneObjectState(sceneState, withState) {
|
|
|
537
537
|
continue;
|
|
538
538
|
}
|
|
539
539
|
const propValue = clonedState[key];
|
|
540
|
+
if (propValue instanceof SceneObjectBase) {
|
|
541
|
+
clonedState[key] = propValue.clone();
|
|
542
|
+
}
|
|
540
543
|
if (propValue instanceof SceneObjectRef) {
|
|
541
544
|
console.warn("Cloning object with SceneObjectRef");
|
|
542
545
|
continue;
|
|
543
546
|
}
|
|
544
|
-
if (propValue
|
|
545
|
-
clonedState[key] = propValue.clone();
|
|
546
|
-
} else if (Array.isArray(propValue)) {
|
|
547
|
+
if (Array.isArray(propValue)) {
|
|
547
548
|
const newArray = [];
|
|
548
549
|
for (const child of propValue) {
|
|
549
550
|
if (child instanceof SceneObjectBase) {
|
|
550
551
|
newArray.push(child.clone());
|
|
551
|
-
} else if (typeof child === "object") {
|
|
552
|
-
newArray.push(lodash.cloneDeep(child));
|
|
553
552
|
} else {
|
|
554
553
|
newArray.push(child);
|
|
555
554
|
}
|
|
556
555
|
}
|
|
557
556
|
clonedState[key] = newArray;
|
|
558
|
-
} else {
|
|
559
|
-
clonedState[key] = lodash.cloneDeep(propValue);
|
|
560
557
|
}
|
|
561
558
|
}
|
|
562
559
|
return clonedState;
|
|
@@ -5107,6 +5104,7 @@ var __spreadValues$A = (a, b) => {
|
|
|
5107
5104
|
return a;
|
|
5108
5105
|
};
|
|
5109
5106
|
var __spreadProps$o = (a, b) => __defProps$o(a, __getOwnPropDescs$o(b));
|
|
5107
|
+
const LABEL_MAX_VISIBLE_LENGTH = 20;
|
|
5110
5108
|
function AdHocFilterPill({ filter, model, readOnly, focusOnWipInputRef }) {
|
|
5111
5109
|
var _a, _b, _c;
|
|
5112
5110
|
const styles = ui.useStyles2(getStyles$b);
|
|
@@ -5119,13 +5117,13 @@ function AdHocFilterPill({ filter, model, readOnly, focusOnWipInputRef }) {
|
|
|
5119
5117
|
const handleChangeViewMode = React.useCallback(
|
|
5120
5118
|
(event, shouldFocusOnPillWrapperOverride) => {
|
|
5121
5119
|
event == null ? void 0 : event.stopPropagation();
|
|
5122
|
-
if (readOnly) {
|
|
5120
|
+
if (readOnly || filter.source) {
|
|
5123
5121
|
return;
|
|
5124
5122
|
}
|
|
5125
5123
|
setShouldFocusOnPillWrapper(shouldFocusOnPillWrapperOverride != null ? shouldFocusOnPillWrapperOverride : !viewMode);
|
|
5126
5124
|
setViewMode(!viewMode);
|
|
5127
5125
|
},
|
|
5128
|
-
[readOnly, viewMode]
|
|
5126
|
+
[readOnly, viewMode, filter.source]
|
|
5129
5127
|
);
|
|
5130
5128
|
React.useEffect(() => {
|
|
5131
5129
|
var _a2;
|
|
@@ -5150,7 +5148,7 @@ function AdHocFilterPill({ filter, model, readOnly, focusOnWipInputRef }) {
|
|
|
5150
5148
|
className: styles.pillText
|
|
5151
5149
|
}, keyLabel, " ", filter.operator, " ", valueLabel);
|
|
5152
5150
|
return /* @__PURE__ */ React__default["default"].createElement("div", {
|
|
5153
|
-
className: css.cx(styles.combinedFilterPill,
|
|
5151
|
+
className: css.cx(styles.combinedFilterPill, readOnly && styles.readOnlyCombinedFilter),
|
|
5154
5152
|
onClick: (e) => {
|
|
5155
5153
|
e.stopPropagation();
|
|
5156
5154
|
setPopulateInputOnEdit(true);
|
|
@@ -5166,12 +5164,12 @@ function AdHocFilterPill({ filter, model, readOnly, focusOnWipInputRef }) {
|
|
|
5166
5164
|
"aria-label": `Edit filter with key ${keyLabel}`,
|
|
5167
5165
|
tabIndex: 0,
|
|
5168
5166
|
ref: pillWrapperRef
|
|
5169
|
-
}, valueLabel.length <
|
|
5167
|
+
}, valueLabel.length < LABEL_MAX_VISIBLE_LENGTH ? pillText : /* @__PURE__ */ React__default["default"].createElement(ui.Tooltip, {
|
|
5170
5168
|
content: /* @__PURE__ */ React__default["default"].createElement("div", {
|
|
5171
5169
|
className: styles.tooltipText
|
|
5172
5170
|
}, valueLabel),
|
|
5173
5171
|
placement: "top"
|
|
5174
|
-
}, pillText), !readOnly ? /* @__PURE__ */ React__default["default"].createElement(ui.IconButton, {
|
|
5172
|
+
}, pillText), !readOnly && !filter.source ? /* @__PURE__ */ React__default["default"].createElement(ui.IconButton, {
|
|
5175
5173
|
onClick: (e) => {
|
|
5176
5174
|
e.stopPropagation();
|
|
5177
5175
|
model._removeFilter(filter);
|
|
@@ -5187,9 +5185,14 @@ function AdHocFilterPill({ filter, model, readOnly, focusOnWipInputRef }) {
|
|
|
5187
5185
|
},
|
|
5188
5186
|
name: "times",
|
|
5189
5187
|
size: "md",
|
|
5190
|
-
className: styles.
|
|
5188
|
+
className: styles.pillIcon,
|
|
5191
5189
|
tooltip: `Remove filter with key ${keyLabel}`
|
|
5192
|
-
}) : 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
|
+
}));
|
|
5193
5196
|
}
|
|
5194
5197
|
return /* @__PURE__ */ React__default["default"].createElement(AdHocCombobox, {
|
|
5195
5198
|
filter,
|
|
@@ -5225,7 +5228,7 @@ const getStyles$b = (theme) => ({
|
|
|
5225
5228
|
background: theme.colors.action.selected
|
|
5226
5229
|
}
|
|
5227
5230
|
}),
|
|
5228
|
-
|
|
5231
|
+
pillIcon: css.css({
|
|
5229
5232
|
marginInline: theme.spacing(0.5),
|
|
5230
5233
|
cursor: "pointer",
|
|
5231
5234
|
"&:hover": {
|
|
@@ -5259,7 +5262,7 @@ const AdHocFiltersAlwaysWipCombobox = React.forwardRef(function AdHocFiltersAlwa
|
|
|
5259
5262
|
});
|
|
5260
5263
|
|
|
5261
5264
|
const AdHocFiltersComboboxRenderer = React.memo(function AdHocFiltersComboboxRenderer2({ model }) {
|
|
5262
|
-
const { filters, readOnly } = model.useState();
|
|
5265
|
+
const { baseFilters, filters, readOnly } = model.useState();
|
|
5263
5266
|
const styles = ui.useStyles2(getStyles$a);
|
|
5264
5267
|
const focusOnWipInputRef = React.useRef();
|
|
5265
5268
|
return /* @__PURE__ */ React__default["default"].createElement("div", {
|
|
@@ -5272,7 +5275,14 @@ const AdHocFiltersComboboxRenderer = React.memo(function AdHocFiltersComboboxRen
|
|
|
5272
5275
|
name: "filter",
|
|
5273
5276
|
className: styles.filterIcon,
|
|
5274
5277
|
size: "lg"
|
|
5275
|
-
}),
|
|
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, {
|
|
5276
5286
|
key: `${index}-${filter.key}`,
|
|
5277
5287
|
filter,
|
|
5278
5288
|
model,
|
|
@@ -5334,6 +5344,11 @@ var __spreadValues$z = (a, b) => {
|
|
|
5334
5344
|
return a;
|
|
5335
5345
|
};
|
|
5336
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 || {});
|
|
5337
5352
|
const OPERATORS = [
|
|
5338
5353
|
{
|
|
5339
5354
|
value: "=",
|
|
@@ -5966,7 +5981,7 @@ class SceneQueryRunner extends SceneObjectBase {
|
|
|
5966
5981
|
return clone;
|
|
5967
5982
|
}
|
|
5968
5983
|
prepareRequests(timeRange, ds) {
|
|
5969
|
-
var _a;
|
|
5984
|
+
var _a, _b;
|
|
5970
5985
|
const { minInterval, queries } = this.state;
|
|
5971
5986
|
let request = __spreadValues$y({
|
|
5972
5987
|
app: "scenes",
|
|
@@ -5988,7 +6003,12 @@ class SceneQueryRunner extends SceneObjectBase {
|
|
|
5988
6003
|
queryCachingTTL: this.state.queryCachingTTL
|
|
5989
6004
|
}, getEnrichedDataRequest(this));
|
|
5990
6005
|
if (this._adhocFiltersVar) {
|
|
5991
|
-
request.filters =
|
|
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));
|
|
5992
6012
|
}
|
|
5993
6013
|
if (this._groupByVar) {
|
|
5994
6014
|
request.groupByKeys = this._groupByVar.state.value;
|
|
@@ -6011,7 +6031,7 @@ class SceneQueryRunner extends SceneObjectBase {
|
|
|
6011
6031
|
const primaryTimeRange = timeRange.state.value;
|
|
6012
6032
|
let secondaryRequests = [];
|
|
6013
6033
|
let secondaryProcessors = /* @__PURE__ */ new Map();
|
|
6014
|
-
for (const provider of (
|
|
6034
|
+
for (const provider of (_b = this.getClosestExtraQueryProviders()) != null ? _b : []) {
|
|
6015
6035
|
for (const { req, processor } of provider.getExtraQueries(request)) {
|
|
6016
6036
|
const requestId = getNextRequestId$1();
|
|
6017
6037
|
secondaryRequests.push(__spreadProps$m(__spreadValues$y({}, req), { requestId }));
|
|
@@ -14195,6 +14215,7 @@ exports.EmbeddedScene = EmbeddedScene;
|
|
|
14195
14215
|
exports.FieldConfigBuilder = FieldConfigBuilder;
|
|
14196
14216
|
exports.FieldConfigBuilders = FieldConfigBuilders;
|
|
14197
14217
|
exports.FieldConfigOverridesBuilder = FieldConfigOverridesBuilder;
|
|
14218
|
+
exports.FilterSource = FilterSource;
|
|
14198
14219
|
exports.GroupByVariable = GroupByVariable;
|
|
14199
14220
|
exports.IntervalVariable = IntervalVariable;
|
|
14200
14221
|
exports.LazyLoader = LazyLoader;
|