@grafana/scenes 7.2.0 → 7.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +13 -0
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/querying/SceneQueryRunner.js +2 -2
- package/dist/esm/querying/SceneQueryRunner.js.map +1 -1
- package/dist/esm/variables/DrilldownDependenciesManager.js +24 -6
- package/dist/esm/variables/DrilldownDependenciesManager.js.map +1 -1
- package/dist/esm/variables/adhoc/AdHocFiltersRecommendations.js +2 -2
- package/dist/esm/variables/adhoc/AdHocFiltersRecommendations.js.map +1 -1
- package/dist/esm/variables/adhoc/AdHocFiltersVariable.js +42 -13
- package/dist/esm/variables/adhoc/AdHocFiltersVariable.js.map +1 -1
- package/dist/esm/variables/adhoc/AdHocFiltersVariableUrlSyncHandler.js +7 -3
- package/dist/esm/variables/adhoc/AdHocFiltersVariableUrlSyncHandler.js.map +1 -1
- package/dist/esm/variables/adhoc/patchGetAdhocFilters.js +2 -2
- package/dist/esm/variables/adhoc/patchGetAdhocFilters.js.map +1 -1
- package/dist/index.d.ts +5 -3
- package/dist/index.js +6216 -6163
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
|
@@ -173,16 +173,21 @@ class AdHocFiltersVariable extends SceneObjectBase {
|
|
|
173
173
|
(_a = this._recommendations) == null ? void 0 : _a.storeRecentFilter(update);
|
|
174
174
|
}
|
|
175
175
|
setState(update) {
|
|
176
|
-
var _a, _b;
|
|
176
|
+
var _a, _b, _c;
|
|
177
177
|
let filterExpressionChanged = false;
|
|
178
|
+
let groupByChanged = false;
|
|
178
179
|
if ((update.filters && update.filters !== this.state.filters || update.originFilters && update.originFilters !== this.state.originFilters) && !update.filterExpression) {
|
|
179
180
|
const filters = (_a = update.filters) != null ? _a : this.state.filters;
|
|
180
181
|
const originFilters = (_b = update.originFilters) != null ? _b : this.state.originFilters;
|
|
181
182
|
update.filterExpression = renderExpression(this.state.expressionBuilder, [...originFilters != null ? originFilters : [], ...filters]);
|
|
182
183
|
filterExpressionChanged = update.filterExpression !== this.state.filterExpression;
|
|
184
|
+
groupByChanged = haveGroupByKeysChanged(
|
|
185
|
+
[...(_c = this.state.originFilters) != null ? _c : [], ...this.state.filters],
|
|
186
|
+
[...originFilters != null ? originFilters : [], ...filters]
|
|
187
|
+
);
|
|
183
188
|
}
|
|
184
189
|
super.setState(update);
|
|
185
|
-
if (filterExpressionChanged) {
|
|
190
|
+
if (filterExpressionChanged || groupByChanged) {
|
|
186
191
|
this.publishEvent(new SceneVariableValueChangedEvent(this), true);
|
|
187
192
|
}
|
|
188
193
|
}
|
|
@@ -228,6 +233,7 @@ class AdHocFiltersVariable extends SceneObjectBase {
|
|
|
228
233
|
updateFilters(filters, options) {
|
|
229
234
|
var _a;
|
|
230
235
|
let filterExpressionChanged = false;
|
|
236
|
+
let groupByChanged = false;
|
|
231
237
|
let filterExpression = void 0;
|
|
232
238
|
if (filters && filters !== this.state.filters) {
|
|
233
239
|
filterExpression = renderExpression(this.state.expressionBuilder, [
|
|
@@ -235,21 +241,25 @@ class AdHocFiltersVariable extends SceneObjectBase {
|
|
|
235
241
|
...filters
|
|
236
242
|
]);
|
|
237
243
|
filterExpressionChanged = filterExpression !== this.state.filterExpression;
|
|
244
|
+
groupByChanged = haveGroupByKeysChanged(this.state.filters, filters);
|
|
238
245
|
}
|
|
239
246
|
super.setState({
|
|
240
247
|
filters,
|
|
241
248
|
filterExpression
|
|
242
249
|
});
|
|
243
|
-
if (filterExpressionChanged && (options == null ? void 0 : options.skipPublish) !== true || (options == null ? void 0 : options.forcePublish)) {
|
|
250
|
+
if ((filterExpressionChanged || groupByChanged) && (options == null ? void 0 : options.skipPublish) !== true || (options == null ? void 0 : options.forcePublish)) {
|
|
244
251
|
this.publishEvent(new SceneVariableValueChangedEvent(this), true);
|
|
245
252
|
}
|
|
246
253
|
}
|
|
247
254
|
/**
|
|
248
255
|
* Add a group-by filter (key only, operator 'groupBy', no value).
|
|
249
|
-
*
|
|
256
|
+
* No-op when enableGroupBy is false.
|
|
250
257
|
*/
|
|
251
258
|
_addGroupByFilter(item) {
|
|
252
259
|
var _a, _b;
|
|
260
|
+
if (!this.state.enableGroupBy) {
|
|
261
|
+
return;
|
|
262
|
+
}
|
|
253
263
|
const key = (_a = item.value) != null ? _a : "";
|
|
254
264
|
const keyLabel = (_b = item.label) != null ? _b : key;
|
|
255
265
|
const newFilter = {
|
|
@@ -548,8 +558,8 @@ class AdHocFiltersVariable extends SceneObjectBase {
|
|
|
548
558
|
if (!ds || !ds.getTagKeys) {
|
|
549
559
|
return [];
|
|
550
560
|
}
|
|
551
|
-
const applicableOriginFilters = (_d = (_c = this.state.originFilters) == null ? void 0 : _c.filter((f) => !f.nonApplicable)) != null ? _d : [];
|
|
552
|
-
const otherFilters = this.state.filters.filter((f) => f.key !== currentKey && !f.nonApplicable).concat((_e = this.state.baseFilters) != null ? _e : []).concat(applicableOriginFilters);
|
|
561
|
+
const applicableOriginFilters = (_d = (_c = this.state.originFilters) == null ? void 0 : _c.filter((f) => !f.nonApplicable && !isGroupByFilter(f))) != null ? _d : [];
|
|
562
|
+
const otherFilters = this.state.filters.filter((f) => f.key !== currentKey && !f.nonApplicable && !isGroupByFilter(f)).concat((_e = this.state.baseFilters) != null ? _e : []).concat(applicableOriginFilters);
|
|
553
563
|
const timeRange = sceneGraph.getTimeRange(this).state.value;
|
|
554
564
|
const queries = this.state.useQueriesAsFilterForOptions ? getQueriesForVariables(this) : void 0;
|
|
555
565
|
const response = await ds.getTagKeys({
|
|
@@ -576,7 +586,10 @@ class AdHocFiltersVariable extends SceneObjectBase {
|
|
|
576
586
|
* Get possible group-by keys.
|
|
577
587
|
*/
|
|
578
588
|
async _getGroupByKeys(currentKey) {
|
|
579
|
-
var _a, _b;
|
|
589
|
+
var _a, _b, _c, _d, _e;
|
|
590
|
+
if (!this.state.enableGroupBy) {
|
|
591
|
+
return [];
|
|
592
|
+
}
|
|
580
593
|
const override = await ((_b = (_a = this.state).getGroupByKeysProvider) == null ? void 0 : _b.call(_a, this, currentKey));
|
|
581
594
|
if (override && override.replace) {
|
|
582
595
|
return dataFromResponse(override.values).map(toSelectableValue);
|
|
@@ -585,10 +598,12 @@ class AdHocFiltersVariable extends SceneObjectBase {
|
|
|
585
598
|
if (!ds || !ds.getGroupByKeys) {
|
|
586
599
|
return override ? dataFromResponse(override.values).map(toSelectableValue) : [];
|
|
587
600
|
}
|
|
601
|
+
const applicableOriginFilters = (_d = (_c = this.state.originFilters) == null ? void 0 : _c.filter((f) => !f.nonApplicable && !isGroupByFilter(f))) != null ? _d : [];
|
|
602
|
+
const otherFilters = this.state.filters.filter((f) => f.key !== currentKey && !f.nonApplicable && !isGroupByFilter(f)).concat((_e = this.state.baseFilters) != null ? _e : []).concat(applicableOriginFilters);
|
|
588
603
|
const timeRange = sceneGraph.getTimeRange(this).state.value;
|
|
589
604
|
const queries = this.state.useQueriesAsFilterForOptions ? getQueriesForVariables(this) : void 0;
|
|
590
605
|
const response = await ds.getGroupByKeys({
|
|
591
|
-
filters:
|
|
606
|
+
filters: otherFilters,
|
|
592
607
|
queries,
|
|
593
608
|
timeRange,
|
|
594
609
|
scopes: sceneGraph.getScopes(this),
|
|
@@ -620,8 +635,8 @@ class AdHocFiltersVariable extends SceneObjectBase {
|
|
|
620
635
|
if (!ds || !ds.getTagValues) {
|
|
621
636
|
return [];
|
|
622
637
|
}
|
|
623
|
-
const originFilters = (_d = (_c = this.state.originFilters) == null ? void 0 : _c.filter((f) => f.key !== filter.key)) != null ? _d : [];
|
|
624
|
-
const otherFilters = this.state.filters.filter((f) => f.key !== filter.key).concat(originFilters);
|
|
638
|
+
const originFilters = (_d = (_c = this.state.originFilters) == null ? void 0 : _c.filter((f) => f.key !== filter.key && !isGroupByFilter(f))) != null ? _d : [];
|
|
639
|
+
const otherFilters = this.state.filters.filter((f) => f.key !== filter.key && !isGroupByFilter(f)).concat(originFilters);
|
|
625
640
|
const timeRange = sceneGraph.getTimeRange(this).state.value;
|
|
626
641
|
const queries = this.state.useQueriesAsFilterForOptions ? getQueriesForVariables(this) : void 0;
|
|
627
642
|
let scopes = sceneGraph.getScopes(this);
|
|
@@ -679,7 +694,20 @@ class AdHocFiltersVariable extends SceneObjectBase {
|
|
|
679
694
|
AdHocFiltersVariable.Component = AdHocFiltersVariableRenderer;
|
|
680
695
|
function renderExpression(builder, filters) {
|
|
681
696
|
var _a;
|
|
682
|
-
return (builder != null ? builder : renderPrometheusLabelFilters)(
|
|
697
|
+
return (builder != null ? builder : renderPrometheusLabelFilters)(
|
|
698
|
+
(_a = filters == null ? void 0 : filters.filter((f) => isFilterApplicable(f) && !isGroupByFilter(f))) != null ? _a : []
|
|
699
|
+
);
|
|
700
|
+
}
|
|
701
|
+
function getGroupByKeys(filters) {
|
|
702
|
+
return filters.filter((f) => isGroupByFilter(f) && isFilterComplete(f)).map((f) => f.key).sort();
|
|
703
|
+
}
|
|
704
|
+
function haveGroupByKeysChanged(prev, next) {
|
|
705
|
+
const prevKeys = getGroupByKeys(prev);
|
|
706
|
+
const nextKeys = getGroupByKeys(next);
|
|
707
|
+
if (prevKeys.length !== nextKeys.length) {
|
|
708
|
+
return true;
|
|
709
|
+
}
|
|
710
|
+
return prevKeys.some((key, i) => key !== nextKeys[i]);
|
|
683
711
|
}
|
|
684
712
|
function AdHocFiltersVariableRenderer({ model }) {
|
|
685
713
|
const { filters, readOnly, addFilterButtonText } = model.useState();
|
|
@@ -721,8 +749,9 @@ function toSelectableValue(input) {
|
|
|
721
749
|
function isMatchAllFilter(filter) {
|
|
722
750
|
return filter.operator === "=~" && filter.value === ".*";
|
|
723
751
|
}
|
|
752
|
+
const GROUP_BY_OPERATOR = "groupBy";
|
|
724
753
|
function isGroupByFilter(filter) {
|
|
725
|
-
return filter.operator ===
|
|
754
|
+
return filter.operator === GROUP_BY_OPERATOR;
|
|
726
755
|
}
|
|
727
756
|
function isFilterComplete(filter) {
|
|
728
757
|
return filter.key !== "" && filter.operator !== "" && (isGroupByFilter(filter) || filter.value !== "");
|
|
@@ -746,5 +775,5 @@ function isMultiValueOperator(operatorValue) {
|
|
|
746
775
|
return Boolean(operator.isMulti);
|
|
747
776
|
}
|
|
748
777
|
|
|
749
|
-
export { AdHocFiltersVariable, AdHocFiltersVariableRenderer, OPERATORS, isFilterApplicable, isFilterComplete, isGroupByFilter, isMatchAllFilter, isMultiValueOperator, toSelectableValue };
|
|
778
|
+
export { AdHocFiltersVariable, AdHocFiltersVariableRenderer, GROUP_BY_OPERATOR, OPERATORS, isFilterApplicable, isFilterComplete, isGroupByFilter, isMatchAllFilter, isMultiValueOperator, toSelectableValue };
|
|
750
779
|
//# sourceMappingURL=AdHocFiltersVariable.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdHocFiltersVariable.js","sources":["../../../../src/variables/adhoc/AdHocFiltersVariable.tsx"],"sourcesContent":["import React, { useMemo } from 'react';\nimport {\n AdHocVariableFilter,\n GetTagResponse,\n GrafanaTheme2,\n MetricFindValue,\n // @ts-expect-error (temporary till we update grafana/data)\n DrilldownsApplicability,\n Scope,\n SelectableValue,\n} from '@grafana/data';\nimport { SceneObjectBase } from '../../core/SceneObjectBase';\nimport { SceneVariable, SceneVariableState, SceneVariableValueChangedEvent, VariableValue } from '../types';\nimport { ControlsLayout, SceneComponentProps, SceneDataQuery } from '../../core/types';\nimport { DataSourceRef } from '@grafana/schema';\nimport {\n dataFromResponse,\n escapeOriginFilterUrlDelimiters,\n getQueriesForVariables,\n renderPrometheusLabelFilters,\n responseHasError,\n} 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, toArray } from './AdHocFiltersVariableUrlSyncHandler';\nimport { css } from '@emotion/css';\nimport { getEnrichedFiltersRequest } from '../getEnrichedFiltersRequest';\nimport { AdHocFiltersComboboxRenderer } from './AdHocFiltersCombobox/AdHocFiltersComboboxRenderer';\nimport { wrapInSafeSerializableSceneObject } from '../../utils/wrapInSafeSerializableSceneObject';\nimport { debounce, isEqual } from 'lodash';\nimport { getAdHocFiltersFromScopes } from './getAdHocFiltersFromScopes';\nimport { VariableDependencyConfig } from '../VariableDependencyConfig';\nimport { getQueryController } from '../../core/sceneGraph/getQueryController';\nimport { FILTER_REMOVED_INTERACTION, FILTER_RESTORED_INTERACTION } from '../../performance/interactionConstants';\nimport { AdHocFiltersVariableController } from './controller/AdHocFiltersVariableController';\nimport { AdHocFiltersRecommendations } from './AdHocFiltersRecommendations';\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 origin, it can be either scopes, dashboards or undefined,\n // which means it won't appear in the UI\n origin?: FilterOrigin;\n // whether this is basically a cancelled filter through filter-key =~ .*\n matchAllFilter?: boolean;\n // whether this specific filter is read-only and cannot be edited\n readOnly?: boolean;\n // whether this specific filter is restorable to some value from _originalValues\n restorable?: boolean;\n // sets this filter as non-applicable\n nonApplicable?: boolean;\n // reason with reason for nonApplicable filters\n nonApplicableReason?: string;\n}\n\nconst ORIGIN_FILTERS_KEY: keyof AdHocFiltersVariableState = 'originFilters';\n\nexport type AdHocControlsLayout = ControlsLayout | 'combobox';\n\nexport type FilterOrigin = 'dashboard' | 'scope' | string;\n\nexport interface AdHocFiltersVariableState extends SceneVariableState {\n /** Optional text to display on the 'add filter' button */\n addFilterButtonText?: string;\n /** Optional placeholder text for the filter input field */\n inputPlaceholder?: string;\n /** Optional placeholder for the group-by key input */\n groupByInputPlaceholder?: string;\n /** The visible filters */\n filters: AdHocFilterWithLabels[];\n /** Base filters to always apply when looking up keys*/\n baseFilters?: AdHocFilterWithLabels[];\n /** Filters originated from a source */\n originFilters?: 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 group-by key lookup.\n * Return replace: true to override the default lookup (ds.getGroupByKeys or ds.getTagKeys).\n * Return replace: false to combine the results with the default lookup.\n */\n getGroupByKeysProvider?: getGroupByKeysProvider;\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 * state for checking whether drilldown applicability is enabled\n */\n applicabilityEnabled?: boolean;\n /**\n * When true, enables a collapse button that appears when filters wrap to multiple lines.\n * Allows users to collapse the filter UI to save vertical space.\n */\n collapsible?: boolean;\n\n /**\n * enables drilldown recommendations\n */\n drilldownRecommendationsEnabled?: boolean;\n\n /**\n * When true, the \"groupBy\" operator is available and filters can be used as group-by dimensions.\n */\n enableGroupBy?: boolean;\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 getGroupByKeysProvider = (\n variable: AdHocFiltersVariable,\n currentKey?: string | null\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: 'Less than or equal to',\n },\n {\n value: '>',\n description: 'Greater than',\n },\n {\n value: '>=',\n description: 'Greater than or equal to',\n },\n];\n\ninterface OriginalValue {\n value: string[];\n operator: string;\n valueLabels?: string[];\n keyLabel?: string;\n nonApplicable?: boolean;\n nonApplicableReason?: string;\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 // holds the originalValues of all baseFilters in a map. The values\n // are set on construct and used to restore a baseFilter with an origin\n // to its original value if edited at some point\n private _originalValues: Map<string, OriginalValue> = new Map();\n private _prevScopes: Scope[] = [];\n\n /** Needed for scopes dependency */\n protected _variableDependency = new VariableDependencyConfig(this, {\n dependsOnScopes: true,\n onReferencedVariableValueChanged: () => this._updateScopesFilters(),\n });\n\n protected _urlSync = new AdHocFiltersVariableUrlSyncHandler(this);\n\n private _debouncedVerifyApplicability = debounce(this._verifyApplicability, 100);\n\n private _recommendations: AdHocFiltersRecommendations | undefined;\n\n public constructor(state: Partial<AdHocFiltersVariableState>) {\n const behaviors = state.$behaviors ?? [];\n const recommendations = state.drilldownRecommendationsEnabled ? new AdHocFiltersRecommendations() : undefined;\n\n if (recommendations) {\n behaviors.push(recommendations);\n }\n\n super({\n type: 'adhoc',\n name: state.name ?? 'Filters',\n filters: [],\n datasource: null,\n applyMode: 'auto',\n filterExpression:\n state.filterExpression ??\n renderExpression(state.expressionBuilder, [...(state.originFilters ?? []), ...(state.filters ?? [])]),\n ...state,\n $behaviors: behaviors.length > 0 ? behaviors : undefined,\n });\n\n this._recommendations = recommendations;\n\n if (this.state.applyMode === 'auto') {\n patchGetAdhocFilters(this);\n }\n\n this.state.originFilters?.forEach((filter) => {\n this._setOriginalValue(filter);\n });\n\n this.addActivationHandler(this._activationHandler);\n }\n\n private _activationHandler = () => {\n this._debouncedVerifyApplicability();\n\n return () => {\n this.state.originFilters?.forEach((filter) => {\n if (filter.restorable) {\n this.restoreOriginalFilter(filter);\n }\n });\n\n this.setState({ applicabilityEnabled: false });\n };\n };\n\n public getRecommendations(): AdHocFiltersRecommendations | undefined {\n return this._recommendations;\n }\n\n private _updateScopesFilters() {\n const scopes = sceneGraph.getScopes(this);\n\n if (!scopes || !scopes.length) {\n this.setState({\n originFilters: this.state.originFilters?.filter((filter) => filter.origin !== 'scope'),\n });\n return;\n }\n\n const scopeFilters = getAdHocFiltersFromScopes(scopes);\n\n if (!scopeFilters.length) {\n return;\n }\n\n let finalFilters = scopeFilters;\n const scopeInjectedFilters: AdHocFilterWithLabels[] = [];\n const remainingFilters: AdHocFilterWithLabels[] = [];\n\n // set original values for scope filters as well\n finalFilters.forEach((scopeFilter) => {\n this._setOriginalValue(scopeFilter);\n });\n\n this.state.originFilters?.forEach((filter) => {\n if (filter.origin === 'scope') {\n scopeInjectedFilters.push(filter);\n } else {\n remainingFilters.push(filter);\n }\n });\n\n if (this._prevScopes.length) {\n this.setState({ originFilters: [...finalFilters, ...remainingFilters] });\n this._prevScopes = scopes;\n\n this._debouncedVerifyApplicability();\n return;\n }\n\n const editedScopeFilters = scopeInjectedFilters.filter((filter) => filter.restorable);\n const editedScopeFilterKeys = editedScopeFilters.map((filter) => filter.key);\n const scopeFilterKeys = scopeFilters.map((filter) => filter.key);\n\n // if the scope filters contain the key of an edited scope filter, we replace\n // with the edited filter. We also add the remaining unedited scope filters\n // when not overwriting\n finalFilters = [\n ...editedScopeFilters.filter((filter) => scopeFilterKeys.includes(filter.key)),\n ...scopeFilters.filter((filter) => !editedScopeFilterKeys.includes(filter.key)),\n ];\n\n // maintain other originFilters in the array, only update scopes ones\n this.setState({ originFilters: [...finalFilters, ...remainingFilters] });\n this._prevScopes = scopes;\n\n this._debouncedVerifyApplicability();\n }\n\n private async verifyApplicabilityAndStoreRecentFilter(update: AdHocFilterWithLabels) {\n await this._verifyApplicability();\n this._recommendations?.storeRecentFilter(update);\n }\n\n public setState(update: Partial<AdHocFiltersVariableState>): void {\n let filterExpressionChanged = false;\n\n if (\n ((update.filters && update.filters !== this.state.filters) ||\n (update.originFilters && update.originFilters !== this.state.originFilters)) &&\n !update.filterExpression\n ) {\n const filters = update.filters ?? this.state.filters;\n const originFilters = update.originFilters ?? this.state.originFilters;\n\n update.filterExpression = renderExpression(this.state.expressionBuilder, [...(originFilters ?? []), ...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 private _resolveOriginFlags(\n key: string,\n origin: string,\n values: string[],\n operator: string,\n singleValue: string\n ): { restorable: boolean; matchAllFilter: boolean } {\n const original = this._originalValues.get(`${key}-${origin}`);\n const isMatchAll = operator === '=~' && singleValue === '.*';\n const isRestorable = !isEqual(values, original?.value) || operator !== original?.operator;\n\n return {\n matchAllFilter: isMatchAll,\n restorable: isRestorable,\n };\n }\n\n public validateOriginFilters(filters: AdHocFilterWithLabels[]): AdHocFilterWithLabels[] {\n return filters.map((filter) => {\n if (!filter.origin) {\n return filter;\n }\n\n if (!this._originalValues.has(`${filter.key}-${filter.origin}`)) {\n return filter;\n }\n\n const updateValues = filter.values || (filter.value ? [filter.value] : undefined);\n if (!updateValues) {\n return {\n ...filter,\n operator: '=~',\n value: '.*',\n values: ['.*'],\n valueLabels: ['All'],\n matchAllFilter: true,\n nonApplicable: false,\n restorable: true,\n };\n }\n\n const flags = this._resolveOriginFlags(filter.key, filter.origin, updateValues, filter.operator, filter.value);\n return { ...filter, ...flags };\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, [\n ...(this.state.originFilters ?? []),\n ...filters,\n ]);\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 /**\n * Add a group-by filter (key only, operator 'groupBy', no value).\n * Only relevant when enableGroupBy is true.\n */\n public _addGroupByFilter(item: SelectableValue<string>): void {\n const key = item.value ?? '';\n const keyLabel = item.label ?? key;\n const newFilter: AdHocFilterWithLabels = {\n key,\n keyLabel,\n operator: 'groupBy',\n value: '',\n condition: '',\n };\n this.updateFilters([...this.state.filters, newFilter]);\n }\n\n public restoreOriginalFilter(filter: AdHocFilterWithLabels) {\n if (!filter.restorable) {\n return;\n }\n\n const originalFilter = this._originalValues.get(`${filter.key}-${filter.origin}`);\n if (!originalFilter) {\n return;\n }\n\n const queryController = getQueryController(this);\n queryController?.startProfile(FILTER_RESTORED_INTERACTION);\n this._updateFilter(filter, {\n value: originalFilter.value[0],\n values: isMultiValueOperator(originalFilter.operator) ? originalFilter.value : undefined,\n valueLabels: originalFilter.valueLabels ?? originalFilter.value,\n operator: originalFilter.operator,\n nonApplicable: originalFilter.nonApplicable,\n });\n }\n\n /**\n * Get the original value for an origin filter before any user modifications.\n * Returns undefined if no original is tracked for this filter.\n */\n public getOriginalValue(\n filter: AdHocFilterWithLabels\n ): { value: string[]; operator: string; valueLabels?: string[]; keyLabel?: string } | undefined {\n return this._originalValues.get(`${filter.key}-${filter.origin}`);\n }\n\n /**\n * Store a snapshot of the filter's current value and operator so it can be restored later.\n */\n private _setOriginalValue(filter: AdHocFilterWithLabels): void {\n this._originalValues.set(`${filter.key}-${filter.origin}`, {\n value: filter.values ?? [filter.value],\n operator: filter.operator,\n ...(filter.valueLabels && { valueLabels: filter.valueLabels }),\n ...(filter.keyLabel && { keyLabel: filter.keyLabel }),\n });\n }\n\n /**\n * Get original filters from original values.\n * Returns filters from _originalValues map.\n */\n public getOriginalFilters(): AdHocFilterWithLabels[] {\n return [...this._originalValues.entries()].map(([mapKey, original]) => {\n const delimiter = mapKey.lastIndexOf('-');\n const key = mapKey.substring(0, delimiter);\n const origin = mapKey.substring(delimiter + 1);\n return {\n key,\n origin,\n value: original.value[0],\n values: isMultiValueOperator(original.operator) ? original.value : undefined,\n valueLabels: original.valueLabels ?? original.value,\n keyLabel: original.keyLabel ?? key,\n operator: original.operator,\n nonApplicable: original.nonApplicable,\n } as AdHocFilterWithLabels;\n });\n }\n\n /**\n * Replace all stored original values from the given filters array.\n */\n public setOriginalFilters(filters: AdHocFilterWithLabels[]): void {\n this._originalValues.clear();\n filters.forEach((filter) => {\n this._setOriginalValue(filter);\n });\n }\n\n /**\n * Clear all user-added filters and restore origin filters to their original values.\n */\n public clearAll(): void {\n // Restore all restorable origin filters to their original values\n this.state.originFilters?.forEach((filter) => {\n if (filter.restorable) {\n this.restoreOriginalFilter(filter);\n }\n });\n\n // Clear all user-added filters\n this.setState({ filters: [] });\n }\n\n public getValue(fieldPath?: string): VariableValue | undefined {\n if (fieldPath === ORIGIN_FILTERS_KEY) {\n const originFilters = this.state.originFilters;\n\n if (!originFilters || originFilters?.length === 0) {\n return [];\n }\n\n return [\n ...originFilters.map((filter) =>\n toArray(filter).map(escapeOriginFilterUrlDelimiters).join('|').concat(`#${filter.origin}`)\n ),\n ];\n }\n\n return this.state.filterExpression;\n }\n\n public _updateFilter(filter: AdHocFilterWithLabels, update: Partial<AdHocFilterWithLabels>) {\n const { originFilters, filters, _wip } = this.state;\n\n if ('value' in update && !('values' in update)) {\n update = { ...update, values: undefined };\n }\n\n if (filter.origin) {\n const updateValues = update.values || (update.value ? [update.value] : undefined);\n\n if (updateValues) {\n const effectiveOperator = update.operator ?? filter.operator;\n const effectiveValue = update.value ?? filter.value;\n const flags = this._resolveOriginFlags(\n filter.key,\n filter.origin,\n updateValues,\n effectiveOperator,\n effectiveValue\n );\n Object.assign(update, flags);\n }\n\n const updatedFilters =\n originFilters?.map((f) => {\n return f === filter ? { ...f, ...update } : f;\n }) ?? [];\n this.setState({ originFilters: updatedFilters });\n\n return;\n }\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({\n filters: [...filters, { ..._wip, ...update }],\n _wip: undefined,\n });\n this.verifyApplicabilityAndStoreRecentFilter({ ..._wip, ...update });\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 this._recommendations?.storeRecentFilter({\n ...filter,\n ...update,\n });\n }\n\n public updateToMatchAll(filter: AdHocFilterWithLabels) {\n this._updateFilter(filter, {\n operator: '=~',\n value: '.*',\n values: ['.*'],\n valueLabels: ['All'],\n matchAllFilter: true,\n nonApplicable: false,\n restorable: true,\n });\n }\n\n public _removeFilter(filter: AdHocFilterWithLabels) {\n if (filter === this.state._wip) {\n this.setState({ _wip: undefined });\n return;\n }\n\n const queryController = getQueryController(this);\n queryController?.startProfile(FILTER_REMOVED_INTERACTION);\n\n this.setState({ filters: this.state.filters.filter((f) => f !== filter) });\n this._debouncedVerifyApplicability();\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 (isGroupByFilter(filter)) {\n if (this.state.filters.includes(filter)) {\n this._removeFilter(filter);\n } else {\n for (let i = this.state.filters.length - 1; i >= 0; i--) {\n if (isGroupByFilter(this.state.filters[i]) && !this.state.filters[i].readOnly) {\n this._removeFilter(this.state.filters[i]);\n return;\n }\n }\n }\n return;\n }\n\n if (isFilterComplete(filter)) {\n const queryController = getQueryController(this);\n queryController?.startProfile(FILTER_REMOVED_INTERACTION);\n }\n\n const isWip = filter === this.state._wip;\n\n if (this.state.filters.length) {\n const filterToForceIndex = isWip ? findLastAdhocFilterIndex(this.state.filters) : -1;\n\n this.setState({\n filters: this.state.filters.reduce<AdHocFilterWithLabels[]>((acc, f, index) => {\n // adjust forceEdit of preceding filter if not readOnly\n if (index === filterToForceIndex && !f.readOnly) {\n return [...acc, { ...f, forceEdit: true }];\n }\n // remove current filter\n if (f === filter) {\n return acc;\n }\n return [...acc, f];\n }, []),\n });\n } else if (this.state.originFilters?.length) {\n // default forceEdit last filter (when triggering from wip filter)\n const filterToForceIndex = isWip ? findLastAdhocFilterIndex(this.state.originFilters) : -1;\n\n this.setState({\n originFilters: this.state.originFilters.reduce<AdHocFilterWithLabels[]>((acc, f, index) => {\n // adjust forceEdit of preceding filter\n if (index === filterToForceIndex && !f.readOnly) {\n return [...acc, { ...f, forceEdit: true }];\n }\n // remove current filter\n if (f === filter) {\n return acc;\n }\n\n return [...acc, f];\n }, []),\n });\n }\n }\n\n public async getFiltersApplicabilityForQueries(\n filters: AdHocFilterWithLabels[],\n queries: SceneDataQuery[]\n ): Promise<DrilldownsApplicability[] | undefined> {\n const ds = await this._dataSourceSrv.get(this.state.datasource, this._scopedVars);\n // @ts-expect-error (temporary till we update grafana/data)\n if (!ds || !ds.getDrilldownsApplicability) {\n return;\n }\n\n const timeRange = sceneGraph.getTimeRange(this).state.value;\n\n // @ts-expect-error (temporary till we update grafana/data)\n return await ds.getDrilldownsApplicability({\n filters,\n queries,\n timeRange,\n scopes: sceneGraph.getScopes(this),\n ...getEnrichedFiltersRequest(this),\n });\n }\n\n public async _verifyApplicability() {\n const filters = [...this.state.filters, ...(this.state.originFilters ?? [])];\n const queries = this.state.useQueriesAsFilterForOptions ? getQueriesForVariables(this) : undefined;\n\n const response = await this.getFiltersApplicabilityForQueries(filters, queries ?? []);\n\n if (!response) {\n return;\n }\n\n const responseMap = new Map<string, DrilldownsApplicability>();\n response.forEach((filter: DrilldownsApplicability) => {\n responseMap.set(`${filter.key}${filter.origin ? `-${filter.origin}` : ''}`, filter);\n });\n\n const update = {\n applicabilityEnabled: true,\n filters: [...this.state.filters],\n originFilters: [...(this.state.originFilters ?? [])],\n };\n\n update.filters.forEach((f) => {\n const filter = responseMap.get(f.key);\n\n if (filter) {\n f.nonApplicable = !filter.applicable;\n f.nonApplicableReason = filter.reason;\n }\n });\n\n update.originFilters?.forEach((f) => {\n const filter = responseMap.get(`${f.key}-${f.origin}`);\n\n if (filter) {\n if (!f.matchAllFilter) {\n f.nonApplicable = !filter.applicable;\n f.nonApplicableReason = filter.reason;\n }\n\n const originalValue = this._originalValues.get(`${f.key}-${f.origin}`);\n if (originalValue) {\n originalValue.nonApplicable = !filter.applicable;\n originalValue.nonApplicableReason = filter?.reason;\n }\n }\n });\n\n this.setState(update);\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 applicableOriginFilters = this.state.originFilters?.filter((f) => !f.nonApplicable) ?? [];\n const otherFilters = this.state.filters\n .filter((f) => f.key !== currentKey && !f.nonApplicable)\n .concat(this.state.baseFilters ?? [])\n .concat(applicableOriginFilters);\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 scopes: sceneGraph.getScopes(this),\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 group-by keys.\n */\n public async _getGroupByKeys(currentKey: string | null): Promise<Array<SelectableValue<string>>> {\n const override = await this.state.getGroupByKeysProvider?.(this, currentKey);\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 // @ts-expect-error (TODO: remove after upgrading with https://github.com/grafana/grafana/pull/118270)\n if (!ds || !ds.getGroupByKeys) {\n return override ? dataFromResponse(override.values).map(toSelectableValue) : [];\n }\n\n const timeRange = sceneGraph.getTimeRange(this).state.value;\n const queries = this.state.useQueriesAsFilterForOptions ? getQueriesForVariables(this) : undefined;\n\n // @ts-expect-error (TODO: remove after upgrading with https://github.com/grafana/grafana/pull/118270)\n const response = await ds.getGroupByKeys({\n filters: [],\n queries,\n timeRange,\n scopes: sceneGraph.getScopes(this),\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 const originFilters = this.state.originFilters?.filter((f) => f.key !== filter.key) ?? [];\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(originFilters);\n\n const timeRange = sceneGraph.getTimeRange(this).state.value;\n const queries = this.state.useQueriesAsFilterForOptions ? getQueriesForVariables(this) : undefined;\n\n let scopes = sceneGraph.getScopes(this);\n\n // if current filter is a scope originated one we need to filter out\n // filters with same key in scopes prop, similar to how we do in adhocFilters prop\n if (filter.origin === 'scope') {\n scopes = scopes?.map((scope) => {\n return {\n ...scope,\n spec: {\n ...scope.spec,\n filters: scope.spec.filters?.filter((f) => f.key !== filter.key),\n },\n };\n });\n }\n\n const response = await ds.getTagValues({\n key: filter.key,\n filters: otherFilters,\n timeRange,\n queries,\n scopes,\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?.filter((f) => isFilterApplicable(f)) ?? []);\n}\n\nexport function AdHocFiltersVariableRenderer({ model }: SceneComponentProps<AdHocFiltersVariable>) {\n const { filters, readOnly, addFilterButtonText } = model.useState();\n const styles = useStyles2(getStyles);\n\n // Create controller adapter for combobox mode\n const controller = useMemo(\n () => (model.state.layout === 'combobox' ? new AdHocFiltersVariableController(model) : undefined),\n [model]\n );\n\n if (controller) {\n return <AdHocFiltersComboboxRenderer controller={controller} />;\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 isMatchAllFilter(filter: AdHocFilterWithLabels): boolean {\n return filter.operator === '=~' && filter.value === '.*';\n}\n\nexport function isGroupByFilter(filter: AdHocFilterWithLabels): boolean {\n return filter.operator === 'groupBy';\n}\n\nexport function isFilterComplete(filter: AdHocFilterWithLabels): boolean {\n return filter.key !== '' && filter.operator !== '' && (isGroupByFilter(filter) || filter.value !== '');\n}\n\nexport function isFilterApplicable(filter: AdHocFilterWithLabels): boolean {\n return !filter.nonApplicable;\n}\n\nfunction findLastAdhocFilterIndex(filters: AdHocFilterWithLabels[]): number {\n for (let i = filters.length - 1; i >= 0; i--) {\n if (!isGroupByFilter(filters[i])) {\n return i;\n }\n }\n return -1;\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":["updatedFilters","_a"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AdHocFiltersVariable.js","sources":["../../../../src/variables/adhoc/AdHocFiltersVariable.tsx"],"sourcesContent":["import React, { useMemo } from 'react';\nimport {\n AdHocVariableFilter,\n GetTagResponse,\n GrafanaTheme2,\n MetricFindValue,\n // @ts-expect-error (temporary till we update grafana/data)\n DrilldownsApplicability,\n Scope,\n SelectableValue,\n} from '@grafana/data';\nimport { SceneObjectBase } from '../../core/SceneObjectBase';\nimport { SceneVariable, SceneVariableState, SceneVariableValueChangedEvent, VariableValue } from '../types';\nimport { ControlsLayout, SceneComponentProps, SceneDataQuery } from '../../core/types';\nimport { DataSourceRef } from '@grafana/schema';\nimport {\n dataFromResponse,\n escapeOriginFilterUrlDelimiters,\n getQueriesForVariables,\n renderPrometheusLabelFilters,\n responseHasError,\n} 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, toArray } from './AdHocFiltersVariableUrlSyncHandler';\nimport { css } from '@emotion/css';\nimport { getEnrichedFiltersRequest } from '../getEnrichedFiltersRequest';\nimport { AdHocFiltersComboboxRenderer } from './AdHocFiltersCombobox/AdHocFiltersComboboxRenderer';\nimport { wrapInSafeSerializableSceneObject } from '../../utils/wrapInSafeSerializableSceneObject';\nimport { debounce, isEqual } from 'lodash';\nimport { getAdHocFiltersFromScopes } from './getAdHocFiltersFromScopes';\nimport { VariableDependencyConfig } from '../VariableDependencyConfig';\nimport { getQueryController } from '../../core/sceneGraph/getQueryController';\nimport { FILTER_REMOVED_INTERACTION, FILTER_RESTORED_INTERACTION } from '../../performance/interactionConstants';\nimport { AdHocFiltersVariableController } from './controller/AdHocFiltersVariableController';\nimport { AdHocFiltersRecommendations } from './AdHocFiltersRecommendations';\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 origin, it can be either scopes, dashboards or undefined,\n // which means it won't appear in the UI\n origin?: FilterOrigin;\n // whether this is basically a cancelled filter through filter-key =~ .*\n matchAllFilter?: boolean;\n // whether this specific filter is read-only and cannot be edited\n readOnly?: boolean;\n // whether this specific filter is restorable to some value from _originalValues\n restorable?: boolean;\n // sets this filter as non-applicable\n nonApplicable?: boolean;\n // reason with reason for nonApplicable filters\n nonApplicableReason?: string;\n}\n\nconst ORIGIN_FILTERS_KEY: keyof AdHocFiltersVariableState = 'originFilters';\n\nexport type AdHocControlsLayout = ControlsLayout | 'combobox';\n\nexport type FilterOrigin = 'dashboard' | 'scope' | string;\n\nexport interface AdHocFiltersVariableState extends SceneVariableState {\n /** Optional text to display on the 'add filter' button */\n addFilterButtonText?: string;\n /** Optional placeholder text for the filter input field */\n inputPlaceholder?: string;\n /** Optional placeholder for the group-by key input */\n groupByInputPlaceholder?: string;\n /** The visible filters */\n filters: AdHocFilterWithLabels[];\n /** Base filters to always apply when looking up keys*/\n baseFilters?: AdHocFilterWithLabels[];\n /** Filters originated from a source */\n originFilters?: 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 group-by key lookup.\n * Return replace: true to override the default lookup (ds.getGroupByKeys or ds.getTagKeys).\n * Return replace: false to combine the results with the default lookup.\n */\n getGroupByKeysProvider?: getGroupByKeysProvider;\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 * state for checking whether drilldown applicability is enabled\n */\n applicabilityEnabled?: boolean;\n /**\n * When true, enables a collapse button that appears when filters wrap to multiple lines.\n * Allows users to collapse the filter UI to save vertical space.\n */\n collapsible?: boolean;\n\n /**\n * enables drilldown recommendations\n */\n drilldownRecommendationsEnabled?: boolean;\n\n /**\n * When true, the \"groupBy\" operator is available and filters can be used as group-by dimensions.\n */\n enableGroupBy?: boolean;\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 getGroupByKeysProvider = (\n variable: AdHocFiltersVariable,\n currentKey?: string | null\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: 'Less than or equal to',\n },\n {\n value: '>',\n description: 'Greater than',\n },\n {\n value: '>=',\n description: 'Greater than or equal to',\n },\n];\n\ninterface OriginalValue {\n value: string[];\n operator: string;\n valueLabels?: string[];\n keyLabel?: string;\n nonApplicable?: boolean;\n nonApplicableReason?: string;\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 // holds the originalValues of all baseFilters in a map. The values\n // are set on construct and used to restore a baseFilter with an origin\n // to its original value if edited at some point\n private _originalValues: Map<string, OriginalValue> = new Map();\n private _prevScopes: Scope[] = [];\n\n /** Needed for scopes dependency */\n protected _variableDependency = new VariableDependencyConfig(this, {\n dependsOnScopes: true,\n onReferencedVariableValueChanged: () => this._updateScopesFilters(),\n });\n\n protected _urlSync = new AdHocFiltersVariableUrlSyncHandler(this);\n\n private _debouncedVerifyApplicability = debounce(this._verifyApplicability, 100);\n\n private _recommendations: AdHocFiltersRecommendations | undefined;\n\n public constructor(state: Partial<AdHocFiltersVariableState>) {\n const behaviors = state.$behaviors ?? [];\n const recommendations = state.drilldownRecommendationsEnabled ? new AdHocFiltersRecommendations() : undefined;\n\n if (recommendations) {\n behaviors.push(recommendations);\n }\n\n super({\n type: 'adhoc',\n name: state.name ?? 'Filters',\n filters: [],\n datasource: null,\n applyMode: 'auto',\n filterExpression:\n state.filterExpression ??\n renderExpression(state.expressionBuilder, [...(state.originFilters ?? []), ...(state.filters ?? [])]),\n ...state,\n $behaviors: behaviors.length > 0 ? behaviors : undefined,\n });\n\n this._recommendations = recommendations;\n\n if (this.state.applyMode === 'auto') {\n patchGetAdhocFilters(this);\n }\n\n this.state.originFilters?.forEach((filter) => {\n this._setOriginalValue(filter);\n });\n\n this.addActivationHandler(this._activationHandler);\n }\n\n private _activationHandler = () => {\n this._debouncedVerifyApplicability();\n\n return () => {\n this.state.originFilters?.forEach((filter) => {\n if (filter.restorable) {\n this.restoreOriginalFilter(filter);\n }\n });\n\n this.setState({ applicabilityEnabled: false });\n };\n };\n\n public getRecommendations(): AdHocFiltersRecommendations | undefined {\n return this._recommendations;\n }\n\n private _updateScopesFilters() {\n const scopes = sceneGraph.getScopes(this);\n\n if (!scopes || !scopes.length) {\n this.setState({\n originFilters: this.state.originFilters?.filter((filter) => filter.origin !== 'scope'),\n });\n return;\n }\n\n const scopeFilters = getAdHocFiltersFromScopes(scopes);\n\n if (!scopeFilters.length) {\n return;\n }\n\n let finalFilters = scopeFilters;\n const scopeInjectedFilters: AdHocFilterWithLabels[] = [];\n const remainingFilters: AdHocFilterWithLabels[] = [];\n\n // set original values for scope filters as well\n finalFilters.forEach((scopeFilter) => {\n this._setOriginalValue(scopeFilter);\n });\n\n this.state.originFilters?.forEach((filter) => {\n if (filter.origin === 'scope') {\n scopeInjectedFilters.push(filter);\n } else {\n remainingFilters.push(filter);\n }\n });\n\n if (this._prevScopes.length) {\n this.setState({ originFilters: [...finalFilters, ...remainingFilters] });\n this._prevScopes = scopes;\n\n this._debouncedVerifyApplicability();\n return;\n }\n\n const editedScopeFilters = scopeInjectedFilters.filter((filter) => filter.restorable);\n const editedScopeFilterKeys = editedScopeFilters.map((filter) => filter.key);\n const scopeFilterKeys = scopeFilters.map((filter) => filter.key);\n\n // if the scope filters contain the key of an edited scope filter, we replace\n // with the edited filter. We also add the remaining unedited scope filters\n // when not overwriting\n finalFilters = [\n ...editedScopeFilters.filter((filter) => scopeFilterKeys.includes(filter.key)),\n ...scopeFilters.filter((filter) => !editedScopeFilterKeys.includes(filter.key)),\n ];\n\n // maintain other originFilters in the array, only update scopes ones\n this.setState({ originFilters: [...finalFilters, ...remainingFilters] });\n this._prevScopes = scopes;\n\n this._debouncedVerifyApplicability();\n }\n\n private async verifyApplicabilityAndStoreRecentFilter(update: AdHocFilterWithLabels) {\n await this._verifyApplicability();\n this._recommendations?.storeRecentFilter(update);\n }\n\n public setState(update: Partial<AdHocFiltersVariableState>): void {\n let filterExpressionChanged = false;\n let groupByChanged = false;\n\n if (\n ((update.filters && update.filters !== this.state.filters) ||\n (update.originFilters && update.originFilters !== this.state.originFilters)) &&\n !update.filterExpression\n ) {\n const filters = update.filters ?? this.state.filters;\n const originFilters = update.originFilters ?? this.state.originFilters;\n\n update.filterExpression = renderExpression(this.state.expressionBuilder, [...(originFilters ?? []), ...filters]);\n filterExpressionChanged = update.filterExpression !== this.state.filterExpression;\n groupByChanged = haveGroupByKeysChanged(\n [...(this.state.originFilters ?? []), ...this.state.filters],\n [...(originFilters ?? []), ...filters]\n );\n }\n\n super.setState(update);\n\n if (filterExpressionChanged || groupByChanged) {\n this.publishEvent(new SceneVariableValueChangedEvent(this), true);\n }\n }\n\n private _resolveOriginFlags(\n key: string,\n origin: string,\n values: string[],\n operator: string,\n singleValue: string\n ): { restorable: boolean; matchAllFilter: boolean } {\n const original = this._originalValues.get(`${key}-${origin}`);\n const isMatchAll = operator === '=~' && singleValue === '.*';\n const isRestorable = !isEqual(values, original?.value) || operator !== original?.operator;\n\n return {\n matchAllFilter: isMatchAll,\n restorable: isRestorable,\n };\n }\n\n public validateOriginFilters(filters: AdHocFilterWithLabels[]): AdHocFilterWithLabels[] {\n return filters.map((filter) => {\n if (!filter.origin) {\n return filter;\n }\n\n if (!this._originalValues.has(`${filter.key}-${filter.origin}`)) {\n return filter;\n }\n\n const updateValues = filter.values || (filter.value ? [filter.value] : undefined);\n if (!updateValues) {\n return {\n ...filter,\n operator: '=~',\n value: '.*',\n values: ['.*'],\n valueLabels: ['All'],\n matchAllFilter: true,\n nonApplicable: false,\n restorable: true,\n };\n }\n\n const flags = this._resolveOriginFlags(filter.key, filter.origin, updateValues, filter.operator, filter.value);\n return { ...filter, ...flags };\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 groupByChanged = false;\n let filterExpression: string | undefined = undefined;\n\n if (filters && filters !== this.state.filters) {\n filterExpression = renderExpression(this.state.expressionBuilder, [\n ...(this.state.originFilters ?? []),\n ...filters,\n ]);\n filterExpressionChanged = filterExpression !== this.state.filterExpression;\n groupByChanged = haveGroupByKeysChanged(this.state.filters, filters);\n }\n\n super.setState({\n filters,\n filterExpression,\n });\n\n if (((filterExpressionChanged || groupByChanged) && options?.skipPublish !== true) || options?.forcePublish) {\n this.publishEvent(new SceneVariableValueChangedEvent(this), true);\n }\n }\n\n /**\n * Add a group-by filter (key only, operator 'groupBy', no value).\n * No-op when enableGroupBy is false.\n */\n public _addGroupByFilter(item: SelectableValue<string>): void {\n if (!this.state.enableGroupBy) {\n return;\n }\n\n const key = item.value ?? '';\n const keyLabel = item.label ?? key;\n const newFilter: AdHocFilterWithLabels = {\n key,\n keyLabel,\n operator: 'groupBy',\n value: '',\n condition: '',\n };\n this.updateFilters([...this.state.filters, newFilter]);\n }\n\n public restoreOriginalFilter(filter: AdHocFilterWithLabels) {\n if (!filter.restorable) {\n return;\n }\n\n const originalFilter = this._originalValues.get(`${filter.key}-${filter.origin}`);\n if (!originalFilter) {\n return;\n }\n\n const queryController = getQueryController(this);\n queryController?.startProfile(FILTER_RESTORED_INTERACTION);\n this._updateFilter(filter, {\n value: originalFilter.value[0],\n values: isMultiValueOperator(originalFilter.operator) ? originalFilter.value : undefined,\n valueLabels: originalFilter.valueLabels ?? originalFilter.value,\n operator: originalFilter.operator,\n nonApplicable: originalFilter.nonApplicable,\n });\n }\n\n /**\n * Get the original value for an origin filter before any user modifications.\n * Returns undefined if no original is tracked for this filter.\n */\n public getOriginalValue(\n filter: AdHocFilterWithLabels\n ): { value: string[]; operator: string; valueLabels?: string[]; keyLabel?: string } | undefined {\n return this._originalValues.get(`${filter.key}-${filter.origin}`);\n }\n\n /**\n * Store a snapshot of the filter's current value and operator so it can be restored later.\n */\n private _setOriginalValue(filter: AdHocFilterWithLabels): void {\n this._originalValues.set(`${filter.key}-${filter.origin}`, {\n value: filter.values ?? [filter.value],\n operator: filter.operator,\n ...(filter.valueLabels && { valueLabels: filter.valueLabels }),\n ...(filter.keyLabel && { keyLabel: filter.keyLabel }),\n });\n }\n\n /**\n * Get original filters from original values.\n * Returns filters from _originalValues map.\n */\n public getOriginalFilters(): AdHocFilterWithLabels[] {\n return [...this._originalValues.entries()].map(([mapKey, original]) => {\n const delimiter = mapKey.lastIndexOf('-');\n const key = mapKey.substring(0, delimiter);\n const origin = mapKey.substring(delimiter + 1);\n return {\n key,\n origin,\n value: original.value[0],\n values: isMultiValueOperator(original.operator) ? original.value : undefined,\n valueLabels: original.valueLabels ?? original.value,\n keyLabel: original.keyLabel ?? key,\n operator: original.operator,\n nonApplicable: original.nonApplicable,\n } as AdHocFilterWithLabels;\n });\n }\n\n /**\n * Replace all stored original values from the given filters array.\n */\n public setOriginalFilters(filters: AdHocFilterWithLabels[]): void {\n this._originalValues.clear();\n filters.forEach((filter) => {\n this._setOriginalValue(filter);\n });\n }\n\n /**\n * Clear all user-added filters and restore origin filters to their original values.\n */\n public clearAll(): void {\n // Restore all restorable origin filters to their original values\n this.state.originFilters?.forEach((filter) => {\n if (filter.restorable) {\n this.restoreOriginalFilter(filter);\n }\n });\n\n // Clear all user-added filters\n this.setState({ filters: [] });\n }\n\n public getValue(fieldPath?: string): VariableValue | undefined {\n if (fieldPath === ORIGIN_FILTERS_KEY) {\n const originFilters = this.state.originFilters;\n\n if (!originFilters || originFilters?.length === 0) {\n return [];\n }\n\n return [\n ...originFilters.map((filter) =>\n toArray(filter).map(escapeOriginFilterUrlDelimiters).join('|').concat(`#${filter.origin}`)\n ),\n ];\n }\n\n return this.state.filterExpression;\n }\n\n public _updateFilter(filter: AdHocFilterWithLabels, update: Partial<AdHocFilterWithLabels>) {\n const { originFilters, filters, _wip } = this.state;\n\n if ('value' in update && !('values' in update)) {\n update = { ...update, values: undefined };\n }\n\n if (filter.origin) {\n const updateValues = update.values || (update.value ? [update.value] : undefined);\n\n if (updateValues) {\n const effectiveOperator = update.operator ?? filter.operator;\n const effectiveValue = update.value ?? filter.value;\n const flags = this._resolveOriginFlags(\n filter.key,\n filter.origin,\n updateValues,\n effectiveOperator,\n effectiveValue\n );\n Object.assign(update, flags);\n }\n\n const updatedFilters =\n originFilters?.map((f) => {\n return f === filter ? { ...f, ...update } : f;\n }) ?? [];\n this.setState({ originFilters: updatedFilters });\n\n return;\n }\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({\n filters: [...filters, { ..._wip, ...update }],\n _wip: undefined,\n });\n this.verifyApplicabilityAndStoreRecentFilter({ ..._wip, ...update });\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 this._recommendations?.storeRecentFilter({\n ...filter,\n ...update,\n });\n }\n\n public updateToMatchAll(filter: AdHocFilterWithLabels) {\n this._updateFilter(filter, {\n operator: '=~',\n value: '.*',\n values: ['.*'],\n valueLabels: ['All'],\n matchAllFilter: true,\n nonApplicable: false,\n restorable: true,\n });\n }\n\n public _removeFilter(filter: AdHocFilterWithLabels) {\n if (filter === this.state._wip) {\n this.setState({ _wip: undefined });\n return;\n }\n\n const queryController = getQueryController(this);\n queryController?.startProfile(FILTER_REMOVED_INTERACTION);\n\n this.setState({ filters: this.state.filters.filter((f) => f !== filter) });\n this._debouncedVerifyApplicability();\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 (isGroupByFilter(filter)) {\n if (this.state.filters.includes(filter)) {\n this._removeFilter(filter);\n } else {\n for (let i = this.state.filters.length - 1; i >= 0; i--) {\n if (isGroupByFilter(this.state.filters[i]) && !this.state.filters[i].readOnly) {\n this._removeFilter(this.state.filters[i]);\n return;\n }\n }\n }\n return;\n }\n\n if (isFilterComplete(filter)) {\n const queryController = getQueryController(this);\n queryController?.startProfile(FILTER_REMOVED_INTERACTION);\n }\n\n const isWip = filter === this.state._wip;\n\n if (this.state.filters.length) {\n const filterToForceIndex = isWip ? findLastAdhocFilterIndex(this.state.filters) : -1;\n\n this.setState({\n filters: this.state.filters.reduce<AdHocFilterWithLabels[]>((acc, f, index) => {\n // adjust forceEdit of preceding filter if not readOnly\n if (index === filterToForceIndex && !f.readOnly) {\n return [...acc, { ...f, forceEdit: true }];\n }\n // remove current filter\n if (f === filter) {\n return acc;\n }\n return [...acc, f];\n }, []),\n });\n } else if (this.state.originFilters?.length) {\n // default forceEdit last filter (when triggering from wip filter)\n const filterToForceIndex = isWip ? findLastAdhocFilterIndex(this.state.originFilters) : -1;\n\n this.setState({\n originFilters: this.state.originFilters.reduce<AdHocFilterWithLabels[]>((acc, f, index) => {\n // adjust forceEdit of preceding filter\n if (index === filterToForceIndex && !f.readOnly) {\n return [...acc, { ...f, forceEdit: true }];\n }\n // remove current filter\n if (f === filter) {\n return acc;\n }\n\n return [...acc, f];\n }, []),\n });\n }\n }\n\n public async getFiltersApplicabilityForQueries(\n filters: AdHocFilterWithLabels[],\n queries: SceneDataQuery[]\n ): Promise<DrilldownsApplicability[] | undefined> {\n const ds = await this._dataSourceSrv.get(this.state.datasource, this._scopedVars);\n // @ts-expect-error (temporary till we update grafana/data)\n if (!ds || !ds.getDrilldownsApplicability) {\n return;\n }\n\n const timeRange = sceneGraph.getTimeRange(this).state.value;\n\n // @ts-expect-error (temporary till we update grafana/data)\n return await ds.getDrilldownsApplicability({\n filters,\n queries,\n timeRange,\n scopes: sceneGraph.getScopes(this),\n ...getEnrichedFiltersRequest(this),\n });\n }\n\n public async _verifyApplicability() {\n const filters = [...this.state.filters, ...(this.state.originFilters ?? [])];\n const queries = this.state.useQueriesAsFilterForOptions ? getQueriesForVariables(this) : undefined;\n\n const response = await this.getFiltersApplicabilityForQueries(filters, queries ?? []);\n\n if (!response) {\n return;\n }\n\n const responseMap = new Map<string, DrilldownsApplicability>();\n response.forEach((filter: DrilldownsApplicability) => {\n responseMap.set(`${filter.key}${filter.origin ? `-${filter.origin}` : ''}`, filter);\n });\n\n const update = {\n applicabilityEnabled: true,\n filters: [...this.state.filters],\n originFilters: [...(this.state.originFilters ?? [])],\n };\n\n update.filters.forEach((f) => {\n const filter = responseMap.get(f.key);\n\n if (filter) {\n f.nonApplicable = !filter.applicable;\n f.nonApplicableReason = filter.reason;\n }\n });\n\n update.originFilters?.forEach((f) => {\n const filter = responseMap.get(`${f.key}-${f.origin}`);\n\n if (filter) {\n if (!f.matchAllFilter) {\n f.nonApplicable = !filter.applicable;\n f.nonApplicableReason = filter.reason;\n }\n\n const originalValue = this._originalValues.get(`${f.key}-${f.origin}`);\n if (originalValue) {\n originalValue.nonApplicable = !filter.applicable;\n originalValue.nonApplicableReason = filter?.reason;\n }\n }\n });\n\n this.setState(update);\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 applicableOriginFilters =\n this.state.originFilters?.filter((f) => !f.nonApplicable && !isGroupByFilter(f)) ?? [];\n const otherFilters = this.state.filters\n .filter((f) => f.key !== currentKey && !f.nonApplicable && !isGroupByFilter(f))\n .concat(this.state.baseFilters ?? [])\n .concat(applicableOriginFilters);\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 scopes: sceneGraph.getScopes(this),\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 group-by keys.\n */\n public async _getGroupByKeys(currentKey: string | null): Promise<Array<SelectableValue<string>>> {\n if (!this.state.enableGroupBy) {\n return [];\n }\n\n const override = await this.state.getGroupByKeysProvider?.(this, currentKey);\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 // @ts-expect-error (TODO: remove after upgrading with https://github.com/grafana/grafana/pull/118270)\n if (!ds || !ds.getGroupByKeys) {\n return override ? dataFromResponse(override.values).map(toSelectableValue) : [];\n }\n\n const applicableOriginFilters =\n this.state.originFilters?.filter((f) => !f.nonApplicable && !isGroupByFilter(f)) ?? [];\n const otherFilters = this.state.filters\n .filter((f) => f.key !== currentKey && !f.nonApplicable && !isGroupByFilter(f))\n .concat(this.state.baseFilters ?? [])\n .concat(applicableOriginFilters);\n const timeRange = sceneGraph.getTimeRange(this).state.value;\n const queries = this.state.useQueriesAsFilterForOptions ? getQueriesForVariables(this) : undefined;\n\n // @ts-expect-error (TODO: remove after upgrading with https://github.com/grafana/grafana/pull/118270)\n const response = await ds.getGroupByKeys({\n filters: otherFilters,\n queries,\n timeRange,\n scopes: sceneGraph.getScopes(this),\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 const originFilters = this.state.originFilters?.filter((f) => f.key !== filter.key && !isGroupByFilter(f)) ?? [];\n const otherFilters = this.state.filters\n .filter((f) => f.key !== filter.key && !isGroupByFilter(f))\n .concat(originFilters);\n\n const timeRange = sceneGraph.getTimeRange(this).state.value;\n const queries = this.state.useQueriesAsFilterForOptions ? getQueriesForVariables(this) : undefined;\n\n let scopes = sceneGraph.getScopes(this);\n\n // if current filter is a scope originated one we need to filter out\n // filters with same key in scopes prop, similar to how we do in adhocFilters prop\n if (filter.origin === 'scope') {\n scopes = scopes?.map((scope) => {\n return {\n ...scope,\n spec: {\n ...scope.spec,\n filters: scope.spec.filters?.filter((f) => f.key !== filter.key),\n },\n };\n });\n }\n\n const response = await ds.getTagValues({\n key: filter.key,\n filters: otherFilters,\n timeRange,\n queries,\n scopes,\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)(\n filters?.filter((f) => isFilterApplicable(f) && !isGroupByFilter(f)) ?? []\n );\n}\n\nfunction getGroupByKeys(filters: AdHocFilterWithLabels[]): string[] {\n return filters\n .filter((f) => isGroupByFilter(f) && isFilterComplete(f))\n .map((f) => f.key)\n .sort();\n}\n\nfunction haveGroupByKeysChanged(prev: AdHocFilterWithLabels[], next: AdHocFilterWithLabels[]): boolean {\n const prevKeys = getGroupByKeys(prev);\n const nextKeys = getGroupByKeys(next);\n\n if (prevKeys.length !== nextKeys.length) {\n return true;\n }\n\n return prevKeys.some((key, i) => key !== nextKeys[i]);\n}\n\nexport function AdHocFiltersVariableRenderer({ model }: SceneComponentProps<AdHocFiltersVariable>) {\n const { filters, readOnly, addFilterButtonText } = model.useState();\n const styles = useStyles2(getStyles);\n\n // Create controller adapter for combobox mode\n const controller = useMemo(\n () => (model.state.layout === 'combobox' ? new AdHocFiltersVariableController(model) : undefined),\n [model]\n );\n\n if (controller) {\n return <AdHocFiltersComboboxRenderer controller={controller} />;\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 isMatchAllFilter(filter: AdHocFilterWithLabels): boolean {\n return filter.operator === '=~' && filter.value === '.*';\n}\n\nexport const GROUP_BY_OPERATOR = 'groupBy';\n\nexport function isGroupByFilter(filter: AdHocFilterWithLabels): boolean {\n return filter.operator === GROUP_BY_OPERATOR;\n}\n\nexport function isFilterComplete(filter: AdHocFilterWithLabels): boolean {\n return filter.key !== '' && filter.operator !== '' && (isGroupByFilter(filter) || filter.value !== '');\n}\n\nexport function isFilterApplicable(filter: AdHocFilterWithLabels): boolean {\n return !filter.nonApplicable;\n}\n\nfunction findLastAdhocFilterIndex(filters: AdHocFilterWithLabels[]): number {\n for (let i = filters.length - 1; i >= 0; i--) {\n if (!isGroupByFilter(filters[i])) {\n return i;\n }\n }\n return -1;\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":["updatedFilters","_a"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAgEA,MAAM,kBAAsD,GAAA,eAAA;AAwJrD,MAAM,SAAkC,GAAA;AAAA,EAC7C;AAAA,IACE,KAAO,EAAA,GAAA;AAAA,IACP,WAAa,EAAA;AAAA,GACf;AAAA,EACA;AAAA,IACE,KAAO,EAAA,IAAA;AAAA,IACP,WAAa,EAAA;AAAA,GACf;AAAA,EACA;AAAA,IACE,KAAO,EAAA,IAAA;AAAA,IACP,WAAa,EAAA,2CAAA;AAAA,IACb,OAAS,EAAA;AAAA,GACX;AAAA,EACA;AAAA,IACE,KAAO,EAAA,KAAA;AAAA,IACP,WAAa,EAAA,6CAAA;AAAA,IACb,OAAS,EAAA;AAAA,GACX;AAAA,EACA;AAAA,IACE,KAAO,EAAA,IAAA;AAAA,IACP,WAAa,EAAA,eAAA;AAAA,IACb,OAAS,EAAA;AAAA,GACX;AAAA,EACA;AAAA,IACE,KAAO,EAAA,IAAA;AAAA,IACP,WAAa,EAAA,sBAAA;AAAA,IACb,OAAS,EAAA;AAAA,GACX;AAAA,EACA;AAAA,IACE,KAAO,EAAA,GAAA;AAAA,IACP,WAAa,EAAA;AAAA,GACf;AAAA,EACA;AAAA,IACE,KAAO,EAAA,IAAA;AAAA,IACP,WAAa,EAAA;AAAA,GACf;AAAA,EACA;AAAA,IACE,KAAO,EAAA,GAAA;AAAA,IACP,WAAa,EAAA;AAAA,GACf;AAAA,EACA;AAAA,IACE,KAAO,EAAA,IAAA;AAAA,IACP,WAAa,EAAA;AAAA;AAEjB;AAWO,MAAM,6BACH,eAEV,CAAA;AAAA,EAuBS,YAAY,KAA2C,EAAA;AA1ShE,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA2SI,IAAA,MAAM,SAAY,GAAA,CAAA,EAAA,GAAA,KAAA,CAAM,UAAN,KAAA,IAAA,GAAA,EAAA,GAAoB,EAAC;AACvC,IAAA,MAAM,eAAkB,GAAA,KAAA,CAAM,+BAAkC,GAAA,IAAI,6BAAgC,GAAA,MAAA;AAEpG,IAAA,IAAI,eAAiB,EAAA;AACnB,MAAA,SAAA,CAAU,KAAK,eAAe,CAAA;AAAA;AAGhC,IAAM,KAAA,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,CACE,WAAM,gBAAN,KAAA,IAAA,GAAA,EAAA,GACA,iBAAiB,KAAM,CAAA,iBAAA,EAAmB,CAAC,GAAI,CAAA,EAAA,GAAA,KAAA,CAAM,kBAAN,IAAuB,GAAA,EAAA,GAAA,IAAK,GAAI,CAAA,EAAA,GAAA,KAAA,CAAM,YAAN,IAAiB,GAAA,EAAA,GAAA,EAAG,CAAC,CAAA;AAAA,MACtG,GAAG,KAAA;AAAA,MACH,UAAY,EAAA,SAAA,CAAU,MAAS,GAAA,CAAA,GAAI,SAAY,GAAA;AAAA,KAChD,CAAA;AAvCH,IAAA,IAAA,CAAQ,WAAc,GAAA,EAAE,aAAe,EAAA,iCAAA,CAAkC,IAAI,CAAE,EAAA;AAC/E,IAAA,IAAA,CAAQ,iBAAiB,gBAAiB,EAAA;AAI1C;AAAA;AAAA;AAAA,IAAQ,IAAA,CAAA,eAAA,uBAAkD,GAAI,EAAA;AAC9D,IAAA,IAAA,CAAQ,cAAuB,EAAC;AAGhC;AAAA,IAAU,IAAA,CAAA,mBAAA,GAAsB,IAAI,wBAAA,CAAyB,IAAM,EAAA;AAAA,MACjE,eAAiB,EAAA,IAAA;AAAA,MACjB,gCAAA,EAAkC,MAAM,IAAA,CAAK,oBAAqB;AAAA,KACnE,CAAA;AAED,IAAU,IAAA,CAAA,QAAA,GAAW,IAAI,kCAAA,CAAmC,IAAI,CAAA;AAEhE,IAAA,IAAA,CAAQ,6BAAgC,GAAA,QAAA,CAAS,IAAK,CAAA,oBAAA,EAAsB,GAAG,CAAA;AAsC/E,IAAA,IAAA,CAAQ,qBAAqB,MAAM;AACjC,MAAA,IAAA,CAAK,6BAA8B,EAAA;AAEnC,MAAA,OAAO,MAAM;AA/UjB,QAAA,IAAA,EAAA;AAgVM,QAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAM,CAAA,aAAA,KAAX,IAA0B,GAAA,MAAA,GAAA,EAAA,CAAA,OAAA,CAAQ,CAAC,MAAW,KAAA;AAC5C,UAAA,IAAI,OAAO,UAAY,EAAA;AACrB,YAAA,IAAA,CAAK,sBAAsB,MAAM,CAAA;AAAA;AACnC,SACF,CAAA;AAEA,QAAA,IAAA,CAAK,QAAS,CAAA,EAAE,oBAAsB,EAAA,KAAA,EAAO,CAAA;AAAA,OAC/C;AAAA,KACF;AAzBE,IAAA,IAAA,CAAK,gBAAmB,GAAA,eAAA;AAExB,IAAI,IAAA,IAAA,CAAK,KAAM,CAAA,SAAA,KAAc,MAAQ,EAAA;AACnC,MAAA,oBAAA,CAAqB,IAAI,CAAA;AAAA;AAG3B,IAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAM,CAAA,aAAA,KAAX,IAA0B,GAAA,MAAA,GAAA,EAAA,CAAA,OAAA,CAAQ,CAAC,MAAW,KAAA;AAC5C,MAAA,IAAA,CAAK,kBAAkB,MAAM,CAAA;AAAA,KAC/B,CAAA;AAEA,IAAK,IAAA,CAAA,oBAAA,CAAqB,KAAK,kBAAkB,CAAA;AAAA;AACnD,EAgBO,kBAA8D,GAAA;AACnE,IAAA,OAAO,IAAK,CAAA,gBAAA;AAAA;AACd,EAEQ,oBAAuB,GAAA;AA9VjC,IAAA,IAAA,EAAA,EAAA,EAAA;AA+VI,IAAM,MAAA,MAAA,GAAS,UAAW,CAAA,SAAA,CAAU,IAAI,CAAA;AAExC,IAAA,IAAI,CAAC,MAAA,IAAU,CAAC,MAAA,CAAO,MAAQ,EAAA;AAC7B,MAAA,IAAA,CAAK,QAAS,CAAA;AAAA,QACZ,aAAA,EAAA,CAAe,UAAK,KAAM,CAAA,aAAA,KAAX,mBAA0B,MAAO,CAAA,CAAC,MAAW,KAAA,MAAA,CAAO,MAAW,KAAA,OAAA;AAAA,OAC/E,CAAA;AACD,MAAA;AAAA;AAGF,IAAM,MAAA,YAAA,GAAe,0BAA0B,MAAM,CAAA;AAErD,IAAI,IAAA,CAAC,aAAa,MAAQ,EAAA;AACxB,MAAA;AAAA;AAGF,IAAA,IAAI,YAAe,GAAA,YAAA;AACnB,IAAA,MAAM,uBAAgD,EAAC;AACvD,IAAA,MAAM,mBAA4C,EAAC;AAGnD,IAAa,YAAA,CAAA,OAAA,CAAQ,CAAC,WAAgB,KAAA;AACpC,MAAA,IAAA,CAAK,kBAAkB,WAAW,CAAA;AAAA,KACnC,CAAA;AAED,IAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAM,CAAA,aAAA,KAAX,IAA0B,GAAA,MAAA,GAAA,EAAA,CAAA,OAAA,CAAQ,CAAC,MAAW,KAAA;AAC5C,MAAI,IAAA,MAAA,CAAO,WAAW,OAAS,EAAA;AAC7B,QAAA,oBAAA,CAAqB,KAAK,MAAM,CAAA;AAAA,OAC3B,MAAA;AACL,QAAA,gBAAA,CAAiB,KAAK,MAAM,CAAA;AAAA;AAC9B,KACF,CAAA;AAEA,IAAI,IAAA,IAAA,CAAK,YAAY,MAAQ,EAAA;AAC3B,MAAK,IAAA,CAAA,QAAA,CAAS,EAAE,aAAe,EAAA,CAAC,GAAG,YAAc,EAAA,GAAG,gBAAgB,CAAA,EAAG,CAAA;AACvE,MAAA,IAAA,CAAK,WAAc,GAAA,MAAA;AAEnB,MAAA,IAAA,CAAK,6BAA8B,EAAA;AACnC,MAAA;AAAA;AAGF,IAAA,MAAM,qBAAqB,oBAAqB,CAAA,MAAA,CAAO,CAAC,MAAA,KAAW,OAAO,UAAU,CAAA;AACpF,IAAA,MAAM,wBAAwB,kBAAmB,CAAA,GAAA,CAAI,CAAC,MAAA,KAAW,OAAO,GAAG,CAAA;AAC3E,IAAA,MAAM,kBAAkB,YAAa,CAAA,GAAA,CAAI,CAAC,MAAA,KAAW,OAAO,GAAG,CAAA;AAK/D,IAAe,YAAA,GAAA;AAAA,MACb,GAAG,mBAAmB,MAAO,CAAA,CAAC,WAAW,eAAgB,CAAA,QAAA,CAAS,MAAO,CAAA,GAAG,CAAC,CAAA;AAAA,MAC7E,GAAG,YAAa,CAAA,MAAA,CAAO,CAAC,MAAA,KAAW,CAAC,qBAAsB,CAAA,QAAA,CAAS,MAAO,CAAA,GAAG,CAAC;AAAA,KAChF;AAGA,IAAK,IAAA,CAAA,QAAA,CAAS,EAAE,aAAe,EAAA,CAAC,GAAG,YAAc,EAAA,GAAG,gBAAgB,CAAA,EAAG,CAAA;AACvE,IAAA,IAAA,CAAK,WAAc,GAAA,MAAA;AAEnB,IAAA,IAAA,CAAK,6BAA8B,EAAA;AAAA;AACrC,EAEA,MAAc,wCAAwC,MAA+B,EAAA;AA1ZvF,IAAA,IAAA,EAAA;AA2ZI,IAAA,MAAM,KAAK,oBAAqB,EAAA;AAChC,IAAK,CAAA,EAAA,GAAA,IAAA,CAAA,gBAAA,KAAL,mBAAuB,iBAAkB,CAAA,MAAA,CAAA;AAAA;AAC3C,EAEO,SAAS,MAAkD,EAAA;AA/ZpE,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAgaI,IAAA,IAAI,uBAA0B,GAAA,KAAA;AAC9B,IAAA,IAAI,cAAiB,GAAA,KAAA;AAErB,IAAA,IAAA,CACI,OAAO,OAAW,IAAA,MAAA,CAAO,OAAY,KAAA,IAAA,CAAK,MAAM,OAC/C,IAAA,MAAA,CAAO,aAAiB,IAAA,MAAA,CAAO,kBAAkB,IAAK,CAAA,KAAA,CAAM,aAC/D,KAAA,CAAC,OAAO,gBACR,EAAA;AACA,MAAA,MAAM,OAAU,GAAA,CAAA,EAAA,GAAA,MAAA,CAAO,OAAP,KAAA,IAAA,GAAA,EAAA,GAAkB,KAAK,KAAM,CAAA,OAAA;AAC7C,MAAA,MAAM,aAAgB,GAAA,CAAA,EAAA,GAAA,MAAA,CAAO,aAAP,KAAA,IAAA,GAAA,EAAA,GAAwB,KAAK,KAAM,CAAA,aAAA;AAEzD,MAAA,MAAA,CAAO,gBAAmB,GAAA,gBAAA,CAAiB,IAAK,CAAA,KAAA,CAAM,iBAAmB,EAAA,CAAC,GAAI,aAAA,IAAA,IAAA,GAAA,aAAA,GAAiB,EAAC,EAAI,GAAG,OAAO,CAAC,CAAA;AAC/G,MAA0B,uBAAA,GAAA,MAAA,CAAO,gBAAqB,KAAA,IAAA,CAAK,KAAM,CAAA,gBAAA;AACjE,MAAiB,cAAA,GAAA,sBAAA;AAAA,QACf,CAAC,GAAI,CAAA,EAAA,GAAA,IAAA,CAAK,KAAM,CAAA,aAAA,KAAX,IAA4B,GAAA,EAAA,GAAA,EAAK,EAAA,GAAG,IAAK,CAAA,KAAA,CAAM,OAAO,CAAA;AAAA,QAC3D,CAAC,GAAI,aAAA,IAAA,IAAA,GAAA,aAAA,GAAiB,EAAC,EAAI,GAAG,OAAO;AAAA,OACvC;AAAA;AAGF,IAAA,KAAA,CAAM,SAAS,MAAM,CAAA;AAErB,IAAA,IAAI,2BAA2B,cAAgB,EAAA;AAC7C,MAAA,IAAA,CAAK,YAAa,CAAA,IAAI,8BAA+B,CAAA,IAAI,GAAG,IAAI,CAAA;AAAA;AAClE;AACF,EAEQ,mBACN,CAAA,GAAA,EACA,MACA,EAAA,MAAA,EACA,UACA,WACkD,EAAA;AAClD,IAAM,MAAA,QAAA,GAAW,KAAK,eAAgB,CAAA,GAAA,CAAI,GAAG,GAAG,CAAA,CAAA,EAAI,MAAM,CAAE,CAAA,CAAA;AAC5D,IAAM,MAAA,UAAA,GAAa,QAAa,KAAA,IAAA,IAAQ,WAAgB,KAAA,IAAA;AACxD,IAAM,MAAA,YAAA,GAAe,CAAC,OAAQ,CAAA,MAAA,EAAQ,qCAAU,KAAK,CAAA,IAAK,cAAa,QAAU,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAA,QAAA,CAAA;AAEjF,IAAO,OAAA;AAAA,MACL,cAAgB,EAAA,UAAA;AAAA,MAChB,UAAY,EAAA;AAAA,KACd;AAAA;AACF,EAEO,sBAAsB,OAA2D,EAAA;AACtF,IAAO,OAAA,OAAA,CAAQ,GAAI,CAAA,CAAC,MAAW,KAAA;AAC7B,MAAI,IAAA,CAAC,OAAO,MAAQ,EAAA;AAClB,QAAO,OAAA,MAAA;AAAA;AAGT,MAAI,IAAA,CAAC,IAAK,CAAA,eAAA,CAAgB,GAAI,CAAA,CAAA,EAAG,MAAO,CAAA,GAAG,CAAI,CAAA,EAAA,MAAA,CAAO,MAAM,CAAA,CAAE,CAAG,EAAA;AAC/D,QAAO,OAAA,MAAA;AAAA;AAGT,MAAM,MAAA,YAAA,GAAe,OAAO,MAAW,KAAA,MAAA,CAAO,QAAQ,CAAC,MAAA,CAAO,KAAK,CAAI,GAAA,MAAA,CAAA;AACvE,MAAA,IAAI,CAAC,YAAc,EAAA;AACjB,QAAO,OAAA;AAAA,UACL,GAAG,MAAA;AAAA,UACH,QAAU,EAAA,IAAA;AAAA,UACV,KAAO,EAAA,IAAA;AAAA,UACP,MAAA,EAAQ,CAAC,IAAI,CAAA;AAAA,UACb,WAAA,EAAa,CAAC,KAAK,CAAA;AAAA,UACnB,cAAgB,EAAA,IAAA;AAAA,UAChB,aAAe,EAAA,KAAA;AAAA,UACf,UAAY,EAAA;AAAA,SACd;AAAA;AAGF,MAAM,MAAA,KAAA,GAAQ,IAAK,CAAA,mBAAA,CAAoB,MAAO,CAAA,GAAA,EAAK,MAAO,CAAA,MAAA,EAAQ,YAAc,EAAA,MAAA,CAAO,QAAU,EAAA,MAAA,CAAO,KAAK,CAAA;AAC7G,MAAA,OAAO,EAAE,GAAG,MAAQ,EAAA,GAAG,KAAM,EAAA;AAAA,KAC9B,CAAA;AAAA;AACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,aAAA,CACL,SACA,OAIM,EAAA;AAnfV,IAAA,IAAA,EAAA;AAofI,IAAA,IAAI,uBAA0B,GAAA,KAAA;AAC9B,IAAA,IAAI,cAAiB,GAAA,KAAA;AACrB,IAAA,IAAI,gBAAuC,GAAA,MAAA;AAE3C,IAAA,IAAI,OAAW,IAAA,OAAA,KAAY,IAAK,CAAA,KAAA,CAAM,OAAS,EAAA;AAC7C,MAAmB,gBAAA,GAAA,gBAAA,CAAiB,IAAK,CAAA,KAAA,CAAM,iBAAmB,EAAA;AAAA,QAChE,GAAI,CAAA,EAAA,GAAA,IAAA,CAAK,KAAM,CAAA,aAAA,KAAX,YAA4B,EAAC;AAAA,QACjC,GAAG;AAAA,OACJ,CAAA;AACD,MAA0B,uBAAA,GAAA,gBAAA,KAAqB,KAAK,KAAM,CAAA,gBAAA;AAC1D,MAAA,cAAA,GAAiB,sBAAuB,CAAA,IAAA,CAAK,KAAM,CAAA,OAAA,EAAS,OAAO,CAAA;AAAA;AAGrE,IAAA,KAAA,CAAM,QAAS,CAAA;AAAA,MACb,OAAA;AAAA,MACA;AAAA,KACD,CAAA;AAED,IAAA,IAAA,CAAM,2BAA2B,cAAmB,KAAA,CAAA,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAS,WAAgB,MAAA,IAAA,KAAS,mCAAS,YAAc,CAAA,EAAA;AAC3G,MAAA,IAAA,CAAK,YAAa,CAAA,IAAI,8BAA+B,CAAA,IAAI,GAAG,IAAI,CAAA;AAAA;AAClE;AACF;AAAA;AAAA;AAAA;AAAA,EAMO,kBAAkB,IAAqC,EAAA;AA/gBhE,IAAA,IAAA,EAAA,EAAA,EAAA;AAghBI,IAAI,IAAA,CAAC,IAAK,CAAA,KAAA,CAAM,aAAe,EAAA;AAC7B,MAAA;AAAA;AAGF,IAAM,MAAA,GAAA,GAAA,CAAM,EAAK,GAAA,IAAA,CAAA,KAAA,KAAL,IAAc,GAAA,EAAA,GAAA,EAAA;AAC1B,IAAM,MAAA,QAAA,GAAA,CAAW,EAAK,GAAA,IAAA,CAAA,KAAA,KAAL,IAAc,GAAA,EAAA,GAAA,GAAA;AAC/B,IAAA,MAAM,SAAmC,GAAA;AAAA,MACvC,GAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAU,EAAA,SAAA;AAAA,MACV,KAAO,EAAA,EAAA;AAAA,MACP,SAAW,EAAA;AAAA,KACb;AACA,IAAA,IAAA,CAAK,cAAc,CAAC,GAAG,KAAK,KAAM,CAAA,OAAA,EAAS,SAAS,CAAC,CAAA;AAAA;AACvD,EAEO,sBAAsB,MAA+B,EAAA;AAhiB9D,IAAA,IAAA,EAAA;AAiiBI,IAAI,IAAA,CAAC,OAAO,UAAY,EAAA;AACtB,MAAA;AAAA;AAGF,IAAM,MAAA,cAAA,GAAiB,IAAK,CAAA,eAAA,CAAgB,GAAI,CAAA,CAAA,EAAG,OAAO,GAAG,CAAA,CAAA,EAAI,MAAO,CAAA,MAAM,CAAE,CAAA,CAAA;AAChF,IAAA,IAAI,CAAC,cAAgB,EAAA;AACnB,MAAA;AAAA;AAGF,IAAM,MAAA,eAAA,GAAkB,mBAAmB,IAAI,CAAA;AAC/C,IAAA,eAAA,IAAA,IAAA,GAAA,MAAA,GAAA,eAAA,CAAiB,YAAa,CAAA,2BAAA,CAAA;AAC9B,IAAA,IAAA,CAAK,cAAc,MAAQ,EAAA;AAAA,MACzB,KAAA,EAAO,cAAe,CAAA,KAAA,CAAM,CAAC,CAAA;AAAA,MAC7B,QAAQ,oBAAqB,CAAA,cAAA,CAAe,QAAQ,CAAA,GAAI,eAAe,KAAQ,GAAA,MAAA;AAAA,MAC/E,WAAa,EAAA,CAAA,EAAA,GAAA,cAAA,CAAe,WAAf,KAAA,IAAA,GAAA,EAAA,GAA8B,cAAe,CAAA,KAAA;AAAA,MAC1D,UAAU,cAAe,CAAA,QAAA;AAAA,MACzB,eAAe,cAAe,CAAA;AAAA,KAC/B,CAAA;AAAA;AACH;AAAA;AAAA;AAAA;AAAA,EAMO,iBACL,MAC8F,EAAA;AAC9F,IAAO,OAAA,IAAA,CAAK,gBAAgB,GAAI,CAAA,CAAA,EAAG,OAAO,GAAG,CAAA,CAAA,EAAI,MAAO,CAAA,MAAM,CAAE,CAAA,CAAA;AAAA;AAClE;AAAA;AAAA;AAAA,EAKQ,kBAAkB,MAAqC,EAAA;AAlkBjE,IAAA,IAAA,EAAA;AAmkBI,IAAK,IAAA,CAAA,eAAA,CAAgB,IAAI,CAAG,EAAA,MAAA,CAAO,GAAG,CAAI,CAAA,EAAA,MAAA,CAAO,MAAM,CAAI,CAAA,EAAA;AAAA,MACzD,QAAO,EAAO,GAAA,MAAA,CAAA,MAAA,KAAP,IAAiB,GAAA,EAAA,GAAA,CAAC,OAAO,KAAK,CAAA;AAAA,MACrC,UAAU,MAAO,CAAA,QAAA;AAAA,MACjB,GAAI,MAAO,CAAA,WAAA,IAAe,EAAE,WAAA,EAAa,OAAO,WAAY,EAAA;AAAA,MAC5D,GAAI,MAAO,CAAA,QAAA,IAAY,EAAE,QAAA,EAAU,OAAO,QAAS;AAAA,KACpD,CAAA;AAAA;AACH;AAAA;AAAA;AAAA;AAAA,EAMO,kBAA8C,GAAA;AACnD,IAAA,OAAO,CAAC,GAAG,IAAK,CAAA,eAAA,CAAgB,OAAQ,EAAC,CAAE,CAAA,GAAA,CAAI,CAAC,CAAC,MAAQ,EAAA,QAAQ,CAAM,KAAA;AAhlB3E,MAAA,IAAA,EAAA,EAAA,EAAA;AAilBM,MAAM,MAAA,SAAA,GAAY,MAAO,CAAA,WAAA,CAAY,GAAG,CAAA;AACxC,MAAA,MAAM,GAAM,GAAA,MAAA,CAAO,SAAU,CAAA,CAAA,EAAG,SAAS,CAAA;AACzC,MAAA,MAAM,MAAS,GAAA,MAAA,CAAO,SAAU,CAAA,SAAA,GAAY,CAAC,CAAA;AAC7C,MAAO,OAAA;AAAA,QACL,GAAA;AAAA,QACA,MAAA;AAAA,QACA,KAAA,EAAO,QAAS,CAAA,KAAA,CAAM,CAAC,CAAA;AAAA,QACvB,QAAQ,oBAAqB,CAAA,QAAA,CAAS,QAAQ,CAAA,GAAI,SAAS,KAAQ,GAAA,MAAA;AAAA,QACnE,WAAa,EAAA,CAAA,EAAA,GAAA,QAAA,CAAS,WAAT,KAAA,IAAA,GAAA,EAAA,GAAwB,QAAS,CAAA,KAAA;AAAA,QAC9C,QAAA,EAAA,CAAU,EAAS,GAAA,QAAA,CAAA,QAAA,KAAT,IAAqB,GAAA,EAAA,GAAA,GAAA;AAAA,QAC/B,UAAU,QAAS,CAAA,QAAA;AAAA,QACnB,eAAe,QAAS,CAAA;AAAA,OAC1B;AAAA,KACD,CAAA;AAAA;AACH;AAAA;AAAA;AAAA,EAKO,mBAAmB,OAAwC,EAAA;AAChE,IAAA,IAAA,CAAK,gBAAgB,KAAM,EAAA;AAC3B,IAAQ,OAAA,CAAA,OAAA,CAAQ,CAAC,MAAW,KAAA;AAC1B,MAAA,IAAA,CAAK,kBAAkB,MAAM,CAAA;AAAA,KAC9B,CAAA;AAAA;AACH;AAAA;AAAA;AAAA,EAKO,QAAiB,GAAA;AA9mB1B,IAAA,IAAA,EAAA;AAgnBI,IAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAM,CAAA,aAAA,KAAX,IAA0B,GAAA,MAAA,GAAA,EAAA,CAAA,OAAA,CAAQ,CAAC,MAAW,KAAA;AAC5C,MAAA,IAAI,OAAO,UAAY,EAAA;AACrB,QAAA,IAAA,CAAK,sBAAsB,MAAM,CAAA;AAAA;AACnC,KACF,CAAA;AAGA,IAAA,IAAA,CAAK,QAAS,CAAA,EAAE,OAAS,EAAA,IAAI,CAAA;AAAA;AAC/B,EAEO,SAAS,SAA+C,EAAA;AAC7D,IAAA,IAAI,cAAc,kBAAoB,EAAA;AACpC,MAAM,MAAA,aAAA,GAAgB,KAAK,KAAM,CAAA,aAAA;AAEjC,MAAA,IAAI,CAAC,aAAA,IAAA,CAAiB,aAAe,IAAA,IAAA,GAAA,MAAA,GAAA,aAAA,CAAA,MAAA,MAAW,CAAG,EAAA;AACjD,QAAA,OAAO,EAAC;AAAA;AAGV,MAAO,OAAA;AAAA,QACL,GAAG,aAAc,CAAA,GAAA;AAAA,UAAI,CAAC,MAAA,KACpB,OAAQ,CAAA,MAAM,EAAE,GAAI,CAAA,+BAA+B,CAAE,CAAA,IAAA,CAAK,GAAG,CAAE,CAAA,MAAA,CAAO,CAAI,CAAA,EAAA,MAAA,CAAO,MAAM,CAAE,CAAA;AAAA;AAC3F,OACF;AAAA;AAGF,IAAA,OAAO,KAAK,KAAM,CAAA,gBAAA;AAAA;AACpB,EAEO,aAAA,CAAc,QAA+B,MAAwC,EAAA;AA5oB9F,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA6oBI,IAAA,MAAM,EAAE,aAAA,EAAe,OAAS,EAAA,IAAA,KAAS,IAAK,CAAA,KAAA;AAE9C,IAAA,IAAI,OAAW,IAAA,MAAA,IAAU,EAAE,QAAA,IAAY,MAAS,CAAA,EAAA;AAC9C,MAAA,MAAA,GAAS,EAAE,GAAG,MAAQ,EAAA,MAAA,EAAQ,MAAU,EAAA;AAAA;AAG1C,IAAA,IAAI,OAAO,MAAQ,EAAA;AACjB,MAAM,MAAA,YAAA,GAAe,OAAO,MAAW,KAAA,MAAA,CAAO,QAAQ,CAAC,MAAA,CAAO,KAAK,CAAI,GAAA,MAAA,CAAA;AAEvE,MAAA,IAAI,YAAc,EAAA;AAChB,QAAA,MAAM,iBAAoB,GAAA,CAAA,EAAA,GAAA,MAAA,CAAO,QAAP,KAAA,IAAA,GAAA,EAAA,GAAmB,MAAO,CAAA,QAAA;AACpD,QAAA,MAAM,cAAiB,GAAA,CAAA,EAAA,GAAA,MAAA,CAAO,KAAP,KAAA,IAAA,GAAA,EAAA,GAAgB,MAAO,CAAA,KAAA;AAC9C,QAAA,MAAM,QAAQ,IAAK,CAAA,mBAAA;AAAA,UACjB,MAAO,CAAA,GAAA;AAAA,UACP,MAAO,CAAA,MAAA;AAAA,UACP,YAAA;AAAA,UACA,iBAAA;AAAA,UACA;AAAA,SACF;AACA,QAAO,MAAA,CAAA,MAAA,CAAO,QAAQ,KAAK,CAAA;AAAA;AAG7B,MAAA,MAAMA,eACJ,GAAA,CAAA,EAAA,GAAA,aAAA,IAAA,IAAA,GAAA,MAAA,GAAA,aAAA,CAAe,GAAI,CAAA,CAAC,CAAM,KAAA;AACxB,QAAA,OAAO,MAAM,MAAS,GAAA,EAAE,GAAG,CAAG,EAAA,GAAG,QAAW,GAAA,CAAA;AAAA,OAC9C,CAAA,KAFA,YAEM,EAAC;AACT,MAAA,IAAA,CAAK,QAAS,CAAA,EAAE,aAAeA,EAAAA,eAAAA,EAAgB,CAAA;AAE/C,MAAA;AAAA;AAGF,IAAA,IAAI,WAAW,IAAM,EAAA;AAEnB,MAAA,IAAI,OAAW,IAAA,MAAA,IAAU,MAAO,CAAA,OAAO,MAAM,EAAI,EAAA;AAC/C,QAAA,IAAA,CAAK,QAAS,CAAA;AAAA,UACZ,OAAA,EAAS,CAAC,GAAG,OAAA,EAAS,EAAE,GAAG,IAAA,EAAM,GAAG,MAAA,EAAQ,CAAA;AAAA,UAC5C,IAAM,EAAA;AAAA,SACP,CAAA;AACD,QAAA,IAAA,CAAK,wCAAwC,EAAE,GAAG,IAAM,EAAA,GAAG,QAAQ,CAAA;AAAA,OAC9D,MAAA;AACL,QAAK,IAAA,CAAA,QAAA,CAAS,EAAE,IAAM,EAAA,EAAE,GAAG,MAAQ,EAAA,GAAG,MAAO,EAAA,EAAG,CAAA;AAAA;AAElD,MAAA;AAAA;AAGF,IAAA,MAAM,iBAAiB,IAAK,CAAA,KAAA,CAAM,OAAQ,CAAA,GAAA,CAAI,CAAC,CAAM,KAAA;AACnD,MAAA,OAAO,MAAM,MAAS,GAAA,EAAE,GAAG,CAAG,EAAA,GAAG,QAAW,GAAA,CAAA;AAAA,KAC7C,CAAA;AAED,IAAA,IAAA,CAAK,QAAS,CAAA,EAAE,OAAS,EAAA,cAAA,EAAgB,CAAA;AAEzC,IAAK,CAAA,EAAA,GAAA,IAAA,CAAA,gBAAA,KAAL,mBAAuB,iBAAkB,CAAA;AAAA,MACvC,GAAG,MAAA;AAAA,MACH,GAAG;AAAA,KACL,CAAA;AAAA;AACF,EAEO,iBAAiB,MAA+B,EAAA;AACrD,IAAA,IAAA,CAAK,cAAc,MAAQ,EAAA;AAAA,MACzB,QAAU,EAAA,IAAA;AAAA,MACV,KAAO,EAAA,IAAA;AAAA,MACP,MAAA,EAAQ,CAAC,IAAI,CAAA;AAAA,MACb,WAAA,EAAa,CAAC,KAAK,CAAA;AAAA,MACnB,cAAgB,EAAA,IAAA;AAAA,MAChB,aAAe,EAAA,KAAA;AAAA,MACf,UAAY,EAAA;AAAA,KACb,CAAA;AAAA;AACH,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,MAAA,EAAW,CAAA;AACjC,MAAA;AAAA;AAGF,IAAM,MAAA,eAAA,GAAkB,mBAAmB,IAAI,CAAA;AAC/C,IAAA,eAAA,IAAA,IAAA,GAAA,MAAA,GAAA,eAAA,CAAiB,YAAa,CAAA,0BAAA,CAAA;AAE9B,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;AACzE,IAAA,IAAA,CAAK,6BAA8B,EAAA;AAAA;AACrC,EAEO,iBAAoB,GAAA;AACzB,IAAA,MAAM,cAAiB,GAAA,IAAA,CAAK,KAAM,CAAA,OAAA,CAAQ,GAAG,EAAE,CAAA;AAE/C,IAAA,IAAI,cAAgB,EAAA;AAClB,MAAA,IAAA,CAAK,cAAc,cAAc,CAAA;AAAA;AACnC;AACF,EAEO,yBAAyB,MAA+B,EAAA;AAvuBjE,IAAA,IAAA,EAAA;AAwuBI,IAAI,IAAA,eAAA,CAAgB,MAAM,CAAG,EAAA;AAC3B,MAAA,IAAI,IAAK,CAAA,KAAA,CAAM,OAAQ,CAAA,QAAA,CAAS,MAAM,CAAG,EAAA;AACvC,QAAA,IAAA,CAAK,cAAc,MAAM,CAAA;AAAA,OACpB,MAAA;AACL,QAAS,KAAA,IAAA,CAAA,GAAI,KAAK,KAAM,CAAA,OAAA,CAAQ,SAAS,CAAG,EAAA,CAAA,IAAK,GAAG,CAAK,EAAA,EAAA;AACvD,UAAA,IAAI,eAAgB,CAAA,IAAA,CAAK,KAAM,CAAA,OAAA,CAAQ,CAAC,CAAC,CAAK,IAAA,CAAC,IAAK,CAAA,KAAA,CAAM,OAAQ,CAAA,CAAC,EAAE,QAAU,EAAA;AAC7E,YAAA,IAAA,CAAK,aAAc,CAAA,IAAA,CAAK,KAAM,CAAA,OAAA,CAAQ,CAAC,CAAC,CAAA;AACxC,YAAA;AAAA;AACF;AACF;AAEF,MAAA;AAAA;AAGF,IAAI,IAAA,gBAAA,CAAiB,MAAM,CAAG,EAAA;AAC5B,MAAM,MAAA,eAAA,GAAkB,mBAAmB,IAAI,CAAA;AAC/C,MAAA,eAAA,IAAA,IAAA,GAAA,MAAA,GAAA,eAAA,CAAiB,YAAa,CAAA,0BAAA,CAAA;AAAA;AAGhC,IAAM,MAAA,KAAA,GAAQ,MAAW,KAAA,IAAA,CAAK,KAAM,CAAA,IAAA;AAEpC,IAAI,IAAA,IAAA,CAAK,KAAM,CAAA,OAAA,CAAQ,MAAQ,EAAA;AAC7B,MAAA,MAAM,qBAAqB,KAAQ,GAAA,wBAAA,CAAyB,IAAK,CAAA,KAAA,CAAM,OAAO,CAAI,GAAA,EAAA;AAElF,MAAA,IAAA,CAAK,QAAS,CAAA;AAAA,QACZ,OAAA,EAAS,KAAK,KAAM,CAAA,OAAA,CAAQ,OAAgC,CAAC,GAAA,EAAK,GAAG,KAAU,KAAA;AAE7E,UAAA,IAAI,KAAU,KAAA,kBAAA,IAAsB,CAAC,CAAA,CAAE,QAAU,EAAA;AAC/C,YAAO,OAAA,CAAC,GAAG,GAAK,EAAA,EAAE,GAAG,CAAG,EAAA,SAAA,EAAW,MAAM,CAAA;AAAA;AAG3C,UAAA,IAAI,MAAM,MAAQ,EAAA;AAChB,YAAO,OAAA,GAAA;AAAA;AAET,UAAO,OAAA,CAAC,GAAG,GAAA,EAAK,CAAC,CAAA;AAAA,SACnB,EAAG,EAAE;AAAA,OACN,CAAA;AAAA,KACQ,MAAA,IAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAM,CAAA,aAAA,KAAX,mBAA0B,MAAQ,EAAA;AAE3C,MAAA,MAAM,qBAAqB,KAAQ,GAAA,wBAAA,CAAyB,IAAK,CAAA,KAAA,CAAM,aAAa,CAAI,GAAA,EAAA;AAExF,MAAA,IAAA,CAAK,QAAS,CAAA;AAAA,QACZ,aAAA,EAAe,KAAK,KAAM,CAAA,aAAA,CAAc,OAAgC,CAAC,GAAA,EAAK,GAAG,KAAU,KAAA;AAEzF,UAAA,IAAI,KAAU,KAAA,kBAAA,IAAsB,CAAC,CAAA,CAAE,QAAU,EAAA;AAC/C,YAAO,OAAA,CAAC,GAAG,GAAK,EAAA,EAAE,GAAG,CAAG,EAAA,SAAA,EAAW,MAAM,CAAA;AAAA;AAG3C,UAAA,IAAI,MAAM,MAAQ,EAAA;AAChB,YAAO,OAAA,GAAA;AAAA;AAGT,UAAO,OAAA,CAAC,GAAG,GAAA,EAAK,CAAC,CAAA;AAAA,SACnB,EAAG,EAAE;AAAA,OACN,CAAA;AAAA;AACH;AACF,EAEA,MAAa,iCACX,CAAA,OAAA,EACA,OACgD,EAAA;AAChD,IAAM,MAAA,EAAA,GAAK,MAAM,IAAK,CAAA,cAAA,CAAe,IAAI,IAAK,CAAA,KAAA,CAAM,UAAY,EAAA,IAAA,CAAK,WAAW,CAAA;AAEhF,IAAA,IAAI,CAAC,EAAA,IAAM,CAAC,EAAA,CAAG,0BAA4B,EAAA;AACzC,MAAA;AAAA;AAGF,IAAA,MAAM,SAAY,GAAA,UAAA,CAAW,YAAa,CAAA,IAAI,EAAE,KAAM,CAAA,KAAA;AAGtD,IAAO,OAAA,MAAM,GAAG,0BAA2B,CAAA;AAAA,MACzC,OAAA;AAAA,MACA,OAAA;AAAA,MACA,SAAA;AAAA,MACA,MAAA,EAAQ,UAAW,CAAA,SAAA,CAAU,IAAI,CAAA;AAAA,MACjC,GAAG,0BAA0B,IAAI;AAAA,KAClC,CAAA;AAAA;AACH,EAEA,MAAa,oBAAuB,GAAA;AAxzBtC,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAyzBI,IAAA,MAAM,OAAU,GAAA,CAAC,GAAG,IAAA,CAAK,KAAM,CAAA,OAAA,EAAS,GAAI,CAAA,EAAA,GAAA,IAAA,CAAK,KAAM,CAAA,aAAA,KAAX,IAA4B,GAAA,EAAA,GAAA,EAAG,CAAA;AAC3E,IAAA,MAAM,UAAU,IAAK,CAAA,KAAA,CAAM,4BAA+B,GAAA,sBAAA,CAAuB,IAAI,CAAI,GAAA,MAAA;AAEzF,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,kCAAkC,OAAS,EAAA,OAAA,IAAA,IAAA,GAAA,OAAA,GAAW,EAAE,CAAA;AAEpF,IAAA,IAAI,CAAC,QAAU,EAAA;AACb,MAAA;AAAA;AAGF,IAAM,MAAA,WAAA,uBAAkB,GAAqC,EAAA;AAC7D,IAAS,QAAA,CAAA,OAAA,CAAQ,CAAC,MAAoC,KAAA;AACpD,MAAA,WAAA,CAAY,GAAI,CAAA,CAAA,EAAG,MAAO,CAAA,GAAG,CAAG,EAAA,MAAA,CAAO,MAAS,GAAA,CAAA,CAAA,EAAI,MAAO,CAAA,MAAM,CAAK,CAAA,GAAA,EAAE,IAAI,MAAM,CAAA;AAAA,KACnF,CAAA;AAED,IAAA,MAAM,MAAS,GAAA;AAAA,MACb,oBAAsB,EAAA,IAAA;AAAA,MACtB,OAAS,EAAA,CAAC,GAAG,IAAA,CAAK,MAAM,OAAO,CAAA;AAAA,MAC/B,aAAA,EAAe,CAAC,GAAI,CAAA,EAAA,GAAA,IAAA,CAAK,MAAM,aAAX,KAAA,IAAA,GAAA,EAAA,GAA4B,EAAG;AAAA,KACrD;AAEA,IAAO,MAAA,CAAA,OAAA,CAAQ,OAAQ,CAAA,CAAC,CAAM,KAAA;AAC5B,MAAA,MAAM,MAAS,GAAA,WAAA,CAAY,GAAI,CAAA,CAAA,CAAE,GAAG,CAAA;AAEpC,MAAA,IAAI,MAAQ,EAAA;AACV,QAAE,CAAA,CAAA,aAAA,GAAgB,CAAC,MAAO,CAAA,UAAA;AAC1B,QAAA,CAAA,CAAE,sBAAsB,MAAO,CAAA,MAAA;AAAA;AACjC,KACD,CAAA;AAED,IAAA,CAAA,EAAA,GAAA,MAAA,CAAO,aAAP,KAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAsB,OAAQ,CAAA,CAAC,CAAM,KAAA;AACnC,MAAM,MAAA,MAAA,GAAS,YAAY,GAAI,CAAA,CAAA,EAAG,EAAE,GAAG,CAAA,CAAA,EAAI,CAAE,CAAA,MAAM,CAAE,CAAA,CAAA;AAErD,MAAA,IAAI,MAAQ,EAAA;AACV,QAAI,IAAA,CAAC,EAAE,cAAgB,EAAA;AACrB,UAAE,CAAA,CAAA,aAAA,GAAgB,CAAC,MAAO,CAAA,UAAA;AAC1B,UAAA,CAAA,CAAE,sBAAsB,MAAO,CAAA,MAAA;AAAA;AAGjC,QAAM,MAAA,aAAA,GAAgB,IAAK,CAAA,eAAA,CAAgB,GAAI,CAAA,CAAA,EAAG,EAAE,GAAG,CAAA,CAAA,EAAI,CAAE,CAAA,MAAM,CAAE,CAAA,CAAA;AACrE,QAAA,IAAI,aAAe,EAAA;AACjB,UAAc,aAAA,CAAA,aAAA,GAAgB,CAAC,MAAO,CAAA,UAAA;AACtC,UAAA,aAAA,CAAc,sBAAsB,MAAQ,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAA,MAAA;AAAA;AAC9C;AACF,KACF,CAAA;AAEA,IAAA,IAAA,CAAK,SAAS,MAAM,CAAA;AAAA;AACtB;AAAA;AAAA;AAAA,EAKA,MAAa,SAAS,UAAoE,EAAA;AA72B5F,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA82BI,IAAA,MAAM,WAAW,OAAM,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAM,EAAA,kBAAA,KAAX,4BAAgC,IAAM,EAAA,UAAA,CAAA,CAAA;AAE7D,IAAI,IAAA,QAAA,IAAY,SAAS,OAAS,EAAA;AAChC,MAAA,OAAO,gBAAiB,CAAA,QAAA,CAAS,MAAM,CAAA,CAAE,IAAI,iBAAiB,CAAA;AAAA;AAGhE,IAAI,IAAA,IAAA,CAAK,MAAM,WAAa,EAAA;AAC1B,MAAA,OAAO,IAAK,CAAA,KAAA,CAAM,WAAY,CAAA,GAAA,CAAI,iBAAiB,CAAA;AAAA;AAGrD,IAAM,MAAA,EAAA,GAAK,MAAM,IAAK,CAAA,cAAA,CAAe,IAAI,IAAK,CAAA,KAAA,CAAM,UAAY,EAAA,IAAA,CAAK,WAAW,CAAA;AAChF,IAAA,IAAI,CAAC,EAAA,IAAM,CAAC,EAAA,CAAG,UAAY,EAAA;AACzB,MAAA,OAAO,EAAC;AAAA;AAGV,IAAA,MAAM,2BACJ,EAAK,GAAA,CAAA,EAAA,GAAA,IAAA,CAAA,KAAA,CAAM,aAAX,KAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAA0B,OAAO,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,iBAAiB,CAAC,eAAA,CAAgB,CAAC,CAAA,CAAA,KAA9E,YAAoF,EAAC;AACvF,IAAM,MAAA,YAAA,GAAe,IAAK,CAAA,KAAA,CAAM,OAC7B,CAAA,MAAA,CAAO,CAAC,CAAA,KAAM,CAAE,CAAA,GAAA,KAAQ,UAAc,IAAA,CAAC,CAAE,CAAA,aAAA,IAAiB,CAAC,eAAA,CAAgB,CAAC,CAAC,CAC7E,CAAA,MAAA,CAAA,CAAO,EAAK,GAAA,IAAA,CAAA,KAAA,CAAM,WAAX,KAAA,IAAA,GAAA,EAAA,GAA0B,EAAE,CACnC,CAAA,MAAA,CAAO,uBAAuB,CAAA;AACjC,IAAA,MAAM,SAAY,GAAA,UAAA,CAAW,YAAa,CAAA,IAAI,EAAE,KAAM,CAAA,KAAA;AACtD,IAAA,MAAM,UAAU,IAAK,CAAA,KAAA,CAAM,4BAA+B,GAAA,sBAAA,CAAuB,IAAI,CAAI,GAAA,MAAA;AACzF,IAAM,MAAA,QAAA,GAAW,MAAM,EAAA,CAAG,UAAW,CAAA;AAAA,MACnC,OAAS,EAAA,YAAA;AAAA,MACT,OAAA;AAAA,MACA,SAAA;AAAA,MACA,MAAA,EAAQ,UAAW,CAAA,SAAA,CAAU,IAAI,CAAA;AAAA,MACjC,GAAG,0BAA0B,IAAI;AAAA,KAClC,CAAA;AAED,IAAI,IAAA,gBAAA,CAAiB,QAAQ,CAAG,EAAA;AAC9B,MAAA,IAAA,CAAK,SAAS,EAAE,KAAA,EAAO,QAAS,CAAA,KAAA,CAAM,SAAS,CAAA;AAAA;AAGjD,IAAI,IAAA,IAAA,GAAO,iBAAiB,QAAQ,CAAA;AACpC,IAAA,IAAI,QAAU,EAAA;AACZ,MAAA,IAAA,GAAO,IAAK,CAAA,MAAA,CAAO,gBAAiB,CAAA,QAAA,CAAS,MAAM,CAAC,CAAA;AAAA;AAGtD,IAAM,MAAA,iBAAA,GAAoB,KAAK,KAAM,CAAA,iBAAA;AACrC,IAAA,IAAI,iBAAmB,EAAA;AACrB,MAAO,IAAA,GAAA,IAAA,CAAK,OAAO,CAAC,CAAA,KAAM,EAAE,IAAK,CAAA,KAAA,CAAM,iBAAiB,CAAC,CAAA;AAAA;AAG3D,IAAO,OAAA,IAAA,CAAK,IAAI,iBAAiB,CAAA;AAAA;AACnC;AAAA;AAAA;AAAA,EAKA,MAAa,gBAAgB,UAAoE,EAAA;AAj6BnG,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAk6BI,IAAI,IAAA,CAAC,IAAK,CAAA,KAAA,CAAM,aAAe,EAAA;AAC7B,MAAA,OAAO,EAAC;AAAA;AAGV,IAAA,MAAM,WAAW,OAAM,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAM,EAAA,sBAAA,KAAX,4BAAoC,IAAM,EAAA,UAAA,CAAA,CAAA;AAEjE,IAAI,IAAA,QAAA,IAAY,SAAS,OAAS,EAAA;AAChC,MAAA,OAAO,gBAAiB,CAAA,QAAA,CAAS,MAAM,CAAA,CAAE,IAAI,iBAAiB,CAAA;AAAA;AAGhE,IAAM,MAAA,EAAA,GAAK,MAAM,IAAK,CAAA,cAAA,CAAe,IAAI,IAAK,CAAA,KAAA,CAAM,UAAY,EAAA,IAAA,CAAK,WAAW,CAAA;AAEhF,IAAA,IAAI,CAAC,EAAA,IAAM,CAAC,EAAA,CAAG,cAAgB,EAAA;AAC7B,MAAO,OAAA,QAAA,GAAW,iBAAiB,QAAS,CAAA,MAAM,EAAE,GAAI,CAAA,iBAAiB,IAAI,EAAC;AAAA;AAGhF,IAAA,MAAM,2BACJ,EAAK,GAAA,CAAA,EAAA,GAAA,IAAA,CAAA,KAAA,CAAM,aAAX,KAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAA0B,OAAO,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,iBAAiB,CAAC,eAAA,CAAgB,CAAC,CAAA,CAAA,KAA9E,YAAoF,EAAC;AACvF,IAAM,MAAA,YAAA,GAAe,IAAK,CAAA,KAAA,CAAM,OAC7B,CAAA,MAAA,CAAO,CAAC,CAAA,KAAM,CAAE,CAAA,GAAA,KAAQ,UAAc,IAAA,CAAC,CAAE,CAAA,aAAA,IAAiB,CAAC,eAAA,CAAgB,CAAC,CAAC,CAC7E,CAAA,MAAA,CAAA,CAAO,EAAK,GAAA,IAAA,CAAA,KAAA,CAAM,WAAX,KAAA,IAAA,GAAA,EAAA,GAA0B,EAAE,CACnC,CAAA,MAAA,CAAO,uBAAuB,CAAA;AACjC,IAAA,MAAM,SAAY,GAAA,UAAA,CAAW,YAAa,CAAA,IAAI,EAAE,KAAM,CAAA,KAAA;AACtD,IAAA,MAAM,UAAU,IAAK,CAAA,KAAA,CAAM,4BAA+B,GAAA,sBAAA,CAAuB,IAAI,CAAI,GAAA,MAAA;AAGzF,IAAM,MAAA,QAAA,GAAW,MAAM,EAAA,CAAG,cAAe,CAAA;AAAA,MACvC,OAAS,EAAA,YAAA;AAAA,MACT,OAAA;AAAA,MACA,SAAA;AAAA,MACA,MAAA,EAAQ,UAAW,CAAA,SAAA,CAAU,IAAI,CAAA;AAAA,MACjC,GAAG,0BAA0B,IAAI;AAAA,KAClC,CAAA;AAED,IAAI,IAAA,gBAAA,CAAiB,QAAQ,CAAG,EAAA;AAC9B,MAAA,IAAA,CAAK,SAAS,EAAE,KAAA,EAAO,QAAS,CAAA,KAAA,CAAM,SAAS,CAAA;AAAA;AAGjD,IAAI,IAAA,IAAA,GAAO,iBAAiB,QAAQ,CAAA;AACpC,IAAA,IAAI,QAAU,EAAA;AACZ,MAAA,IAAA,GAAO,IAAK,CAAA,MAAA,CAAO,gBAAiB,CAAA,QAAA,CAAS,MAAM,CAAC,CAAA;AAAA;AAGtD,IAAM,MAAA,iBAAA,GAAoB,KAAK,KAAM,CAAA,iBAAA;AACrC,IAAA,IAAI,iBAAmB,EAAA;AACrB,MAAO,IAAA,GAAA,IAAA,CAAK,OAAO,CAAC,CAAA,KAAM,EAAE,IAAK,CAAA,KAAA,CAAM,iBAAiB,CAAC,CAAA;AAAA;AAG3D,IAAO,OAAA,IAAA,CAAK,IAAI,iBAAiB,CAAA;AAAA;AACnC;AAAA;AAAA;AAAA,EAKA,MAAa,cAAc,MAAwE,EAAA;AAx9BrG,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAy9BI,IAAA,MAAM,WAAW,OAAM,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAM,EAAA,oBAAA,KAAX,4BAAkC,IAAM,EAAA,MAAA,CAAA,CAAA;AAE/D,IAAI,IAAA,QAAA,IAAY,SAAS,OAAS,EAAA;AAChC,MAAA,OAAO,gBAAiB,CAAA,QAAA,CAAS,MAAM,CAAA,CAAE,IAAI,iBAAiB,CAAA;AAAA;AAGhE,IAAM,MAAA,EAAA,GAAK,MAAM,IAAK,CAAA,cAAA,CAAe,IAAI,IAAK,CAAA,KAAA,CAAM,UAAY,EAAA,IAAA,CAAK,WAAW,CAAA;AAEhF,IAAA,IAAI,CAAC,EAAA,IAAM,CAAC,EAAA,CAAG,YAAc,EAAA;AAC3B,MAAA,OAAO,EAAC;AAAA;AAGV,IAAA,MAAM,iBAAgB,EAAK,GAAA,CAAA,EAAA,GAAA,IAAA,CAAA,KAAA,CAAM,aAAX,KAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAA0B,OAAO,CAAC,CAAA,KAAM,CAAE,CAAA,GAAA,KAAQ,OAAO,GAAO,IAAA,CAAC,gBAAgB,CAAC,CAAA,CAAA,KAAlF,YAAwF,EAAC;AAC/G,IAAA,MAAM,eAAe,IAAK,CAAA,KAAA,CAAM,OAC7B,CAAA,MAAA,CAAO,CAAC,CAAM,KAAA,CAAA,CAAE,GAAQ,KAAA,MAAA,CAAO,OAAO,CAAC,eAAA,CAAgB,CAAC,CAAC,CAAA,CACzD,OAAO,aAAa,CAAA;AAEvB,IAAA,MAAM,SAAY,GAAA,UAAA,CAAW,YAAa,CAAA,IAAI,EAAE,KAAM,CAAA,KAAA;AACtD,IAAA,MAAM,UAAU,IAAK,CAAA,KAAA,CAAM,4BAA+B,GAAA,sBAAA,CAAuB,IAAI,CAAI,GAAA,MAAA;AAEzF,IAAI,IAAA,MAAA,GAAS,UAAW,CAAA,SAAA,CAAU,IAAI,CAAA;AAItC,IAAI,IAAA,MAAA,CAAO,WAAW,OAAS,EAAA;AAC7B,MAAS,MAAA,GAAA,MAAA,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAQ,GAAI,CAAA,CAAC,KAAU,KAAA;AAl/BtC,QAAAC,IAAAA,GAAAA;AAm/BQ,QAAO,OAAA;AAAA,UACL,GAAG,KAAA;AAAA,UACH,IAAM,EAAA;AAAA,YACJ,GAAG,KAAM,CAAA,IAAA;AAAA,YACT,OAASA,EAAAA,CAAAA,GAAAA,GAAA,KAAM,CAAA,IAAA,CAAK,OAAX,KAAA,IAAA,GAAA,MAAA,GAAAA,GAAoB,CAAA,MAAA,CAAO,CAAC,CAAA,KAAM,CAAE,CAAA,GAAA,KAAQ,MAAO,CAAA,GAAA;AAAA;AAC9D,SACF;AAAA,OACF,CAAA;AAAA;AAGF,IAAM,MAAA,QAAA,GAAW,MAAM,EAAA,CAAG,YAAa,CAAA;AAAA,MACrC,KAAK,MAAO,CAAA,GAAA;AAAA,MACZ,OAAS,EAAA,YAAA;AAAA,MACT,SAAA;AAAA,MACA,OAAA;AAAA,MACA,MAAA;AAAA,MACA,GAAG,0BAA0B,IAAI;AAAA,KAClC,CAAA;AAED,IAAI,IAAA,gBAAA,CAAiB,QAAQ,CAAG,EAAA;AAC9B,MAAA,IAAA,CAAK,SAAS,EAAE,KAAA,EAAO,QAAS,CAAA,KAAA,CAAM,SAAS,CAAA;AAAA;AAGjD,IAAI,IAAA,MAAA,GAAS,iBAAiB,QAAQ,CAAA;AACtC,IAAA,IAAI,QAAU,EAAA;AACZ,MAAA,MAAA,GAAS,MAAO,CAAA,MAAA,CAAO,gBAAiB,CAAA,QAAA,CAAS,MAAM,CAAC,CAAA;AAAA;AAG1D,IAAO,OAAA,MAAA,CAAO,IAAI,iBAAiB,CAAA;AAAA;AACrC,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;AAAA,KAC1D,CAAA;AAAA;AACH,EAEO,aAAgB,GAAA;AACrB,IAAA,MAAM,EAAE,2BAAA,EAA6B,gBAAmB,GAAA,IAAA,KAAS,IAAK,CAAA,KAAA;AAEtE,IAAA,OAAO,UAAU,MAAO,CAAA,CAAC,EAAE,OAAA,EAAS,SAAc,KAAA;AAChD,MAAI,IAAA,CAAC,+BAA+B,OAAS,EAAA;AAC3C,QAAO,OAAA,KAAA;AAAA;AAET,MAAI,IAAA,CAAC,oBAAoB,OAAS,EAAA;AAChC,QAAO,OAAA,KAAA;AAAA;AAET,MAAO,OAAA,IAAA;AAAA,KACR,CAAE,CAAA,GAAA,CAA6B,CAAC,EAAE,KAAA,EAAO,aAAmB,MAAA;AAAA,MAC3D,KAAO,EAAA,KAAA;AAAA,MACP,KAAA;AAAA,MACA;AAAA,KACA,CAAA,CAAA;AAAA;AAEN;AAzxBa,oBAAA,CAIJ,SAAY,GAAA,4BAAA;AAuxBrB,SAAS,gBAAA,CACP,SACA,OACA,EAAA;AA9iCF,EAAA,IAAA,EAAA;AA+iCE,EAAA,OAAA,CAAQ,OAAW,IAAA,IAAA,GAAA,OAAA,GAAA,4BAAA;AAAA,IAAA,CACjB,EAAS,GAAA,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAA,MAAA,CAAO,CAAC,CAAA,KAAM,kBAAmB,CAAA,CAAC,CAAK,IAAA,CAAC,eAAgB,CAAA,CAAC,CAAlE,CAAA,KAAA,IAAA,GAAA,EAAA,GAAwE;AAAC,GAC3E;AACF;AAEA,SAAS,eAAe,OAA4C,EAAA;AAClE,EAAA,OAAO,QACJ,MAAO,CAAA,CAAC,CAAM,KAAA,eAAA,CAAgB,CAAC,CAAK,IAAA,gBAAA,CAAiB,CAAC,CAAC,EACvD,GAAI,CAAA,CAAC,MAAM,CAAE,CAAA,GAAG,EAChB,IAAK,EAAA;AACV;AAEA,SAAS,sBAAA,CAAuB,MAA+B,IAAwC,EAAA;AACrG,EAAM,MAAA,QAAA,GAAW,eAAe,IAAI,CAAA;AACpC,EAAM,MAAA,QAAA,GAAW,eAAe,IAAI,CAAA;AAEpC,EAAI,IAAA,QAAA,CAAS,MAAW,KAAA,QAAA,CAAS,MAAQ,EAAA;AACvC,IAAO,OAAA,IAAA;AAAA;AAGT,EAAO,OAAA,QAAA,CAAS,KAAK,CAAC,GAAA,EAAK,MAAM,GAAQ,KAAA,QAAA,CAAS,CAAC,CAAC,CAAA;AACtD;AAEgB,SAAA,4BAAA,CAA6B,EAAE,KAAA,EAAoD,EAAA;AACjG,EAAA,MAAM,EAAE,OAAS,EAAA,QAAA,EAAU,mBAAoB,EAAA,GAAI,MAAM,QAAS,EAAA;AAClE,EAAM,MAAA,MAAA,GAAS,WAAW,SAAS,CAAA;AAGnC,EAAA,MAAM,UAAa,GAAA,OAAA;AAAA,IACjB,MAAO,MAAM,KAAM,CAAA,MAAA,KAAW,aAAa,IAAI,8BAAA,CAA+B,KAAK,CAAI,GAAA,MAAA;AAAA,IACvF,CAAC,KAAK;AAAA,GACR;AAEA,EAAA,IAAI,UAAY,EAAA;AACd,IAAO,uBAAA,KAAA,CAAA,aAAA,CAAC,gCAA6B,UAAwB,EAAA,CAAA;AAAA;AAG/D,EAAA,2CACG,KAAI,EAAA,EAAA,SAAA,EAAW,MAAO,CAAA,OAAA,EAAA,EACpB,QACE,MAAO,CAAA,CAAC,MAAW,KAAA,CAAC,OAAO,MAAM,CAAA,CACjC,IAAI,CAAC,MAAA,EAAQ,0BACX,KAAA,CAAA,aAAA,CAAA,KAAA,CAAM,QAAN,EAAA,EAAe,KAAK,KACnB,EAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,mBAAoB,EAAA,EAAA,MAAA,EAAgB,OAAc,CACrD,CACD,CAEF,EAAA,CAAC,4BAAa,KAAA,CAAA,aAAA,CAAA,kBAAA,EAAA,EAAmB,OAAc,GAAI,EAAA,UAAA,EAAW,qBAA0C,CAC3G,CAAA;AAEJ;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;AAAA,GACxB;AACH,CAAA,CAAA;AAEO,SAAS,kBAAkB,KAAiD,EAAA;AACjF,EAAM,MAAA,EAAE,IAAM,EAAA,KAAA,EAAU,GAAA,KAAA;AACxB,EAAA,MAAM,MAAkC,GAAA;AAAA;AAAA;AAAA,IAGtC,KAAA,EAAO,OAAO,IAAI,CAAA;AAAA,IAClB,KAAA,EAAO,MAAO,CAAA,KAAA,IAAA,IAAA,GAAA,KAAA,GAAS,IAAI;AAAA,GAC7B;AAEA,EAAA,IAAI,WAAW,KAAO,EAAA;AACpB,IAAA,MAAA,CAAO,QAAQ,KAAM,CAAA,KAAA;AAAA;AAGvB,EAAA,IAAI,UAAU,KAAO,EAAA;AACnB,IAAA,MAAA,CAAO,OAAO,KAAM,CAAA,IAAA;AAAA;AAGtB,EAAO,OAAA,MAAA;AACT;AAEO,SAAS,iBAAiB,MAAwC,EAAA;AACvE,EAAA,OAAO,MAAO,CAAA,QAAA,KAAa,IAAQ,IAAA,MAAA,CAAO,KAAU,KAAA,IAAA;AACtD;AAEO,MAAM,iBAAoB,GAAA;AAE1B,SAAS,gBAAgB,MAAwC,EAAA;AACtE,EAAA,OAAO,OAAO,QAAa,KAAA,iBAAA;AAC7B;AAEO,SAAS,iBAAiB,MAAwC,EAAA;AACvE,EAAO,OAAA,MAAA,CAAO,GAAQ,KAAA,EAAA,IAAM,MAAO,CAAA,QAAA,KAAa,OAAO,eAAgB,CAAA,MAAM,CAAK,IAAA,MAAA,CAAO,KAAU,KAAA,EAAA,CAAA;AACrG;AAEO,SAAS,mBAAmB,MAAwC,EAAA;AACzE,EAAA,OAAO,CAAC,MAAO,CAAA,aAAA;AACjB;AAEA,SAAS,yBAAyB,OAA0C,EAAA;AAC1E,EAAA,KAAA,IAAS,IAAI,OAAQ,CAAA,MAAA,GAAS,CAAG,EAAA,CAAA,IAAK,GAAG,CAAK,EAAA,EAAA;AAC5C,IAAA,IAAI,CAAC,eAAA,CAAgB,OAAQ,CAAA,CAAC,CAAC,CAAG,EAAA;AAChC,MAAO,OAAA,CAAA;AAAA;AACT;AAEF,EAAO,OAAA,EAAA;AACT;AAEO,SAAS,qBAAqB,aAAgC,EAAA;AACnE,EAAA,MAAM,WAAW,SAAU,CAAA,IAAA,CAAK,CAAC,CAAM,KAAA,CAAA,CAAE,UAAU,aAAa,CAAA;AAChE,EAAA,IAAI,CAAC,QAAU,EAAA;AAEb,IAAO,OAAA,KAAA;AAAA;AAET,EAAO,OAAA,OAAA,CAAQ,SAAS,OAAO,CAAA;AACjC;;;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { isFilterComplete, isMultiValueOperator, isMatchAllFilter } from './AdHocFiltersVariable.js';
|
|
1
|
+
import { isFilterComplete, isGroupByFilter, isMultiValueOperator, isMatchAllFilter } from './AdHocFiltersVariable.js';
|
|
2
2
|
import { escapeOriginFilterUrlDelimiters, toUrlCommaDelimitedString, unescapeUrlDelimiters } from '../utils.js';
|
|
3
3
|
|
|
4
4
|
class AdHocFiltersVariableUrlSyncHandler {
|
|
@@ -76,6 +76,9 @@ function deserializeUrlToFilters(value) {
|
|
|
76
76
|
function toArray(filter) {
|
|
77
77
|
var _a;
|
|
78
78
|
const result = [toUrlCommaDelimitedString(filter.key, filter.keyLabel), filter.operator];
|
|
79
|
+
if (isGroupByFilter(filter)) {
|
|
80
|
+
return result;
|
|
81
|
+
}
|
|
79
82
|
if (isMultiValueOperator(filter.operator)) {
|
|
80
83
|
filter.values.forEach((value, index) => {
|
|
81
84
|
var _a2;
|
|
@@ -87,6 +90,7 @@ function toArray(filter) {
|
|
|
87
90
|
return result;
|
|
88
91
|
}
|
|
89
92
|
function toFilter(urlValue) {
|
|
93
|
+
var _a;
|
|
90
94
|
if (typeof urlValue !== "string" || urlValue.length === 0) {
|
|
91
95
|
return null;
|
|
92
96
|
}
|
|
@@ -100,9 +104,9 @@ function toFilter(urlValue) {
|
|
|
100
104
|
key,
|
|
101
105
|
keyLabel,
|
|
102
106
|
operator,
|
|
103
|
-
value: values[0],
|
|
107
|
+
value: (_a = values[0]) != null ? _a : "",
|
|
104
108
|
values: isMultiValueOperator(operator) ? values.filter((_, index) => index % 2 === 0) : void 0,
|
|
105
|
-
valueLabels: values.filter((_, index) => index % 2 === 1),
|
|
109
|
+
valueLabels: values.length > 0 ? values.filter((_, index) => index % 2 === 1) : void 0,
|
|
106
110
|
condition: "",
|
|
107
111
|
...isFilterOrigin(origin) && { origin },
|
|
108
112
|
...!!restorable && { restorable: true }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdHocFiltersVariableUrlSyncHandler.js","sources":["../../../../src/variables/adhoc/AdHocFiltersVariableUrlSyncHandler.ts"],"sourcesContent":["import { SceneObjectUrlSyncHandler, SceneObjectUrlValue, SceneObjectUrlValues } from '../../core/types';\nimport {\n AdHocFiltersVariable,\n AdHocFilterWithLabels,\n FilterOrigin,\n isFilterComplete,\n isMatchAllFilter,\n isMultiValueOperator,\n} from './AdHocFiltersVariable';\nimport { escapeOriginFilterUrlDelimiters, toUrlCommaDelimitedString, unescapeUrlDelimiters } from '../utils';\n\nexport class AdHocFiltersVariableUrlSyncHandler implements SceneObjectUrlSyncHandler {\n public constructor(private _variable: AdHocFiltersVariable) {}\n\n private getKey(): string {\n return `var-${this._variable.state.name}`;\n }\n\n public getKeys(): string[] {\n return [this.getKey()];\n }\n\n public getUrlState(): SceneObjectUrlValues {\n const filters = this._variable.state.filters;\n const originFilters = this._variable.state.originFilters;\n\n let value = [];\n\n if (filters.length === 0 && originFilters?.length === 0) {\n return { [this.getKey()]: [''] };\n }\n\n if (filters.length) {\n value.push(\n ...filters\n .filter(isFilterComplete)\n .filter((filter) => !filter.hidden)\n .map((filter) => toArray(filter).map(escapeOriginFilterUrlDelimiters).join('|'))\n );\n }\n\n if (originFilters?.length) {\n // injected filters stored in the following format: normal|adhoc|values#filterOrigin#restorable\n value.push(\n ...originFilters\n ?.filter(isFilterComplete)\n .filter((filter) => !filter.hidden && filter.origin && filter.restorable)\n .map((filter) =>\n toArray(filter).map(escapeOriginFilterUrlDelimiters).join('|').concat(`#${filter.origin}#restorable`)\n )\n );\n }\n\n return {\n [this.getKey()]: value.length ? value : [''],\n };\n }\n\n public updateFromUrl(values: SceneObjectUrlValues): void {\n const urlValue = values[this.getKey()];\n\n if (urlValue == null) {\n return;\n }\n\n const filters = deserializeUrlToFilters(urlValue);\n const originFilters = updateOriginFilters([...(this._variable.state.originFilters || [])], filters);\n\n this._variable.setState({\n filters: filters.filter((f) => !f.origin),\n originFilters,\n });\n }\n}\n\nfunction updateOriginFilters(prevOriginFilters: AdHocFilterWithLabels[], filters: AdHocFilterWithLabels[]) {\n const updatedOriginFilters: AdHocFilterWithLabels[] = [...prevOriginFilters];\n\n for (let i = 0; i < filters.length; i++) {\n const foundOriginFilterIndex = prevOriginFilters.findIndex((f) => f.key === filters[i].key);\n\n // if we find a match we update originFilters with what's in the URL.\n if (foundOriginFilterIndex > -1 && filters[i].origin === prevOriginFilters[foundOriginFilterIndex].origin) {\n if (isMatchAllFilter(filters[i])) {\n filters[i].matchAllFilter = true;\n }\n\n updatedOriginFilters[foundOriginFilterIndex] = filters[i];\n } else if (filters[i].origin === 'dashboard') {\n // if it was originating from a dashoard but has no match in the new dashboard\n // remove it's origin, turn it into a normal filter to be set below\n delete filters[i].origin;\n delete filters[i].restorable;\n } else if (foundOriginFilterIndex === -1 && filters[i].origin === 'scope' && filters[i].restorable) {\n // scopes are being set urlSync so we maintain all modified scopes in the adhoc\n // and leave the scopes update to reconciliate on what filters will actually show up\n updatedOriginFilters.push(filters[i]);\n }\n }\n\n return updatedOriginFilters;\n}\n\nfunction deserializeUrlToFilters(value: SceneObjectUrlValue): AdHocFilterWithLabels[] {\n if (Array.isArray(value)) {\n const values = value;\n return values.map(toFilter).filter(isFilter);\n }\n\n const filter = toFilter(value);\n return filter === null ? [] : [filter];\n}\n\nexport function toArray(filter: AdHocFilterWithLabels): string[] {\n const result = [toUrlCommaDelimitedString(filter.key, filter.keyLabel), filter.operator];\n if (isMultiValueOperator(filter.operator)) {\n // TODO remove expect-error when we're on the latest version of @grafana/data\n // @ts-expect-error\n filter.values.forEach((value, index) => {\n result.push(toUrlCommaDelimitedString(value, filter.valueLabels?.[index]));\n });\n } else {\n result.push(toUrlCommaDelimitedString(filter.value, filter.valueLabels?.[0]));\n }\n return result;\n}\n\nfunction toFilter(urlValue: string | number | boolean | undefined | null): AdHocFilterWithLabels | null {\n if (typeof urlValue !== 'string' || urlValue.length === 0) {\n return null;\n }\n\n const [filter, origin, restorable] = urlValue.split('#');\n const [key, keyLabel, operator, _operatorLabel, ...values] = filter\n .split('|')\n .reduce<string[]>((acc, v) => {\n const [key, label] = v.split(',');\n\n acc.push(key, label ?? key);\n\n return acc;\n }, [])\n .map(unescapeUrlDelimiters);\n\n return {\n key,\n keyLabel,\n operator,\n value: values[0],\n values: isMultiValueOperator(operator) ? values.filter((_, index) => index % 2 === 0) : undefined,\n valueLabels: values.filter((_, index) => index % 2 === 1),\n condition: '',\n ...(isFilterOrigin(origin) && { origin }),\n ...(!!restorable && { restorable: true }),\n };\n}\n\nfunction isFilterOrigin(value: string): value is FilterOrigin {\n return value === 'scope' || value === 'dashboard';\n}\n\nfunction isFilter(filter: AdHocFilterWithLabels | null): filter is AdHocFilterWithLabels {\n return filter !== null && typeof filter.key === 'string' && typeof filter.value === 'string';\n}\n"],"names":["_a","key"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AdHocFiltersVariableUrlSyncHandler.js","sources":["../../../../src/variables/adhoc/AdHocFiltersVariableUrlSyncHandler.ts"],"sourcesContent":["import { SceneObjectUrlSyncHandler, SceneObjectUrlValue, SceneObjectUrlValues } from '../../core/types';\nimport {\n AdHocFiltersVariable,\n AdHocFilterWithLabels,\n FilterOrigin,\n isFilterComplete,\n isGroupByFilter,\n isMatchAllFilter,\n isMultiValueOperator,\n} from './AdHocFiltersVariable';\nimport { escapeOriginFilterUrlDelimiters, toUrlCommaDelimitedString, unescapeUrlDelimiters } from '../utils';\n\nexport class AdHocFiltersVariableUrlSyncHandler implements SceneObjectUrlSyncHandler {\n public constructor(private _variable: AdHocFiltersVariable) {}\n\n private getKey(): string {\n return `var-${this._variable.state.name}`;\n }\n\n public getKeys(): string[] {\n return [this.getKey()];\n }\n\n public getUrlState(): SceneObjectUrlValues {\n const filters = this._variable.state.filters;\n const originFilters = this._variable.state.originFilters;\n\n let value = [];\n\n if (filters.length === 0 && originFilters?.length === 0) {\n return { [this.getKey()]: [''] };\n }\n\n if (filters.length) {\n value.push(\n ...filters\n .filter(isFilterComplete)\n .filter((filter) => !filter.hidden)\n .map((filter) => toArray(filter).map(escapeOriginFilterUrlDelimiters).join('|'))\n );\n }\n\n if (originFilters?.length) {\n // injected filters stored in the following format: normal|adhoc|values#filterOrigin#restorable\n value.push(\n ...originFilters\n ?.filter(isFilterComplete)\n .filter((filter) => !filter.hidden && filter.origin && filter.restorable)\n .map((filter) =>\n toArray(filter).map(escapeOriginFilterUrlDelimiters).join('|').concat(`#${filter.origin}#restorable`)\n )\n );\n }\n\n return {\n [this.getKey()]: value.length ? value : [''],\n };\n }\n\n public updateFromUrl(values: SceneObjectUrlValues): void {\n const urlValue = values[this.getKey()];\n\n if (urlValue == null) {\n return;\n }\n\n const filters = deserializeUrlToFilters(urlValue);\n const originFilters = updateOriginFilters([...(this._variable.state.originFilters || [])], filters);\n\n this._variable.setState({\n filters: filters.filter((f) => !f.origin),\n originFilters,\n });\n }\n}\n\nfunction updateOriginFilters(prevOriginFilters: AdHocFilterWithLabels[], filters: AdHocFilterWithLabels[]) {\n const updatedOriginFilters: AdHocFilterWithLabels[] = [...prevOriginFilters];\n\n for (let i = 0; i < filters.length; i++) {\n const foundOriginFilterIndex = prevOriginFilters.findIndex((f) => f.key === filters[i].key);\n\n // if we find a match we update originFilters with what's in the URL.\n if (foundOriginFilterIndex > -1 && filters[i].origin === prevOriginFilters[foundOriginFilterIndex].origin) {\n if (isMatchAllFilter(filters[i])) {\n filters[i].matchAllFilter = true;\n }\n\n updatedOriginFilters[foundOriginFilterIndex] = filters[i];\n } else if (filters[i].origin === 'dashboard') {\n // if it was originating from a dashoard but has no match in the new dashboard\n // remove it's origin, turn it into a normal filter to be set below\n delete filters[i].origin;\n delete filters[i].restorable;\n } else if (foundOriginFilterIndex === -1 && filters[i].origin === 'scope' && filters[i].restorable) {\n // scopes are being set urlSync so we maintain all modified scopes in the adhoc\n // and leave the scopes update to reconciliate on what filters will actually show up\n updatedOriginFilters.push(filters[i]);\n }\n }\n\n return updatedOriginFilters;\n}\n\nfunction deserializeUrlToFilters(value: SceneObjectUrlValue): AdHocFilterWithLabels[] {\n if (Array.isArray(value)) {\n const values = value;\n return values.map(toFilter).filter(isFilter);\n }\n\n const filter = toFilter(value);\n return filter === null ? [] : [filter];\n}\n\nexport function toArray(filter: AdHocFilterWithLabels): string[] {\n const result = [toUrlCommaDelimitedString(filter.key, filter.keyLabel), filter.operator];\n if (isGroupByFilter(filter)) {\n return result;\n }\n if (isMultiValueOperator(filter.operator)) {\n // TODO remove expect-error when we're on the latest version of @grafana/data\n // @ts-expect-error\n filter.values.forEach((value, index) => {\n result.push(toUrlCommaDelimitedString(value, filter.valueLabels?.[index]));\n });\n } else {\n result.push(toUrlCommaDelimitedString(filter.value, filter.valueLabels?.[0]));\n }\n return result;\n}\n\nfunction toFilter(urlValue: string | number | boolean | undefined | null): AdHocFilterWithLabels | null {\n if (typeof urlValue !== 'string' || urlValue.length === 0) {\n return null;\n }\n\n const [filter, origin, restorable] = urlValue.split('#');\n const [key, keyLabel, operator, _operatorLabel, ...values] = filter\n .split('|')\n .reduce<string[]>((acc, v) => {\n const [key, label] = v.split(',');\n\n acc.push(key, label ?? key);\n\n return acc;\n }, [])\n .map(unescapeUrlDelimiters);\n\n return {\n key,\n keyLabel,\n operator,\n value: values[0] ?? '',\n values: isMultiValueOperator(operator) ? values.filter((_, index) => index % 2 === 0) : undefined,\n valueLabels: values.length > 0 ? values.filter((_, index) => index % 2 === 1) : undefined,\n condition: '',\n ...(isFilterOrigin(origin) && { origin }),\n ...(!!restorable && { restorable: true }),\n };\n}\n\nfunction isFilterOrigin(value: string): value is FilterOrigin {\n return value === 'scope' || value === 'dashboard';\n}\n\nfunction isFilter(filter: AdHocFilterWithLabels | null): filter is AdHocFilterWithLabels {\n return filter !== null && typeof filter.key === 'string' && typeof filter.value === 'string';\n}\n"],"names":["_a","key"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { getTemplateSrv, getDataSourceSrv } from '@grafana/runtime';
|
|
2
|
-
import { AdHocFiltersVariable } from './AdHocFiltersVariable.js';
|
|
2
|
+
import { AdHocFiltersVariable, isGroupByFilter } from './AdHocFiltersVariable.js';
|
|
3
3
|
import { interpolate } from '../../core/sceneGraph/sceneGraph.js';
|
|
4
4
|
|
|
5
5
|
let originalGetAdhocFilters = void 0;
|
|
@@ -29,7 +29,7 @@ function patchGetAdhocFilters(filterVar) {
|
|
|
29
29
|
}
|
|
30
30
|
for (const filter of allActiveFilterSets.values()) {
|
|
31
31
|
if (((_a = filter.state.datasource) == null ? void 0 : _a.uid) === ds.uid) {
|
|
32
|
-
return filter.state.filters;
|
|
32
|
+
return filter.state.filters.filter((f) => !isGroupByFilter(f));
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
35
|
return [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"patchGetAdhocFilters.js","sources":["../../../../src/variables/adhoc/patchGetAdhocFilters.ts"],"sourcesContent":["import { getDataSourceSrv, getTemplateSrv } from '@grafana/runtime';\nimport { AdHocVariableFilter } from '@grafana/data';\nimport { AdHocFiltersVariable } from './AdHocFiltersVariable';\nimport { interpolate } from '../../core/sceneGraph/sceneGraph';\nimport { SceneObject } from '../../core/types';\n\nlet originalGetAdhocFilters: any = undefined;\nexport const allActiveFilterSets = new Set<AdHocFiltersVariable>();\n\nexport function patchGetAdhocFilters(filterVar: AdHocFiltersVariable) {\n filterVar.addActivationHandler(() => {\n allActiveFilterSets.add(filterVar);\n return () => allActiveFilterSets.delete(filterVar);\n });\n\n if (originalGetAdhocFilters) {\n return;\n }\n\n const templateSrv: any = getTemplateSrv();\n if (!templateSrv?.getAdhocFilters) {\n console.log('Failed to patch getAdhocFilters');\n return;\n }\n\n originalGetAdhocFilters = templateSrv.getAdhocFilters;\n\n templateSrv.getAdhocFilters = function getAdhocFiltersScenePatch(dsName: string): AdHocVariableFilter[] {\n if (allActiveFilterSets.size === 0) {\n return originalGetAdhocFilters.call(templateSrv, dsName);\n }\n\n const ds = getDataSourceSrv().getInstanceSettings(dsName);\n if (!ds) {\n return [];\n }\n\n for (const filter of allActiveFilterSets.values()) {\n if (filter.state.datasource?.uid === ds.uid) {\n return filter.state.filters;\n }\n }\n\n return [];\n }.bind(templateSrv);\n}\n\n/**\n * Walk up the scene graph from sceneObject to find the closest AdHocFiltersVariable\n * whose interpolated datasource UID matches dsUid. Use this when adhoc filters can\n * live at multiple levels in the hierarchy.\n */\nexport function findClosestAdHocFilterInHierarchy(\n dsUid: string | undefined,\n sceneObject: SceneObject\n): AdHocFiltersVariable | undefined {\n let current: SceneObject | undefined = sceneObject;\n while (current) {\n const variables = current.state.$variables?.state.variables ?? [];\n for (const variable of variables) {\n if (variable instanceof AdHocFiltersVariable && interpolate(variable, variable.state.datasource?.uid) === dsUid) {\n return variable;\n }\n }\n current = current.parent;\n }\n\n return undefined;\n}\n\n/**\n * Search the global set of active AdHocFiltersVariables for one whose interpolated\n * datasource UID matches dsUid. Use this when no scene hierarchy context is available.\n */\nexport function findGlobalAdHocFilterVariableByUid(dsUid: string | undefined): AdHocFiltersVariable | undefined {\n for (const filter of allActiveFilterSets.values()) {\n if (interpolate(filter, filter.state.datasource?.uid) === dsUid) {\n return filter;\n }\n }\n\n return undefined;\n}\n"],"names":[],"mappings":";;;;AAMA,IAAI,uBAA+B,GAAA,MAAA;AACtB,MAAA,mBAAA,uBAA0B,GAA0B;AAE1D,SAAS,qBAAqB,SAAiC,EAAA;AACpE,EAAA,SAAA,CAAU,qBAAqB,MAAM;AACnC,IAAA,mBAAA,CAAoB,IAAI,SAAS,CAAA;AACjC,IAAO,OAAA,MAAM,mBAAoB,CAAA,MAAA,CAAO,SAAS,CAAA;AAAA,GAClD,CAAA;AAED,EAAA,IAAI,uBAAyB,EAAA;AAC3B,IAAA;AAAA;AAGF,EAAA,MAAM,cAAmB,cAAe,EAAA;AACxC,EAAI,IAAA,EAAC,2CAAa,eAAiB,CAAA,EAAA;AACjC,IAAA,OAAA,CAAQ,IAAI,iCAAiC,CAAA;AAC7C,IAAA;AAAA;AAGF,EAAA,uBAAA,GAA0B,WAAY,CAAA,eAAA;AAEtC,EAAY,WAAA,CAAA,eAAA,GAAkB,SAAS,yBAAA,CAA0B,MAAuC,EAAA;AA3B1G,IAAA,IAAA,EAAA;AA4BI,IAAI,IAAA,mBAAA,CAAoB,SAAS,CAAG,EAAA;AAClC,MAAO,OAAA,uBAAA,CAAwB,IAAK,CAAA,WAAA,EAAa,MAAM,CAAA;AAAA;AAGzD,IAAA,MAAM,EAAK,GAAA,gBAAA,EAAmB,CAAA,mBAAA,CAAoB,MAAM,CAAA;AACxD,IAAA,IAAI,CAAC,EAAI,EAAA;AACP,MAAA,OAAO,EAAC;AAAA;AAGV,IAAW,KAAA,MAAA,MAAA,IAAU,mBAAoB,CAAA,MAAA,EAAU,EAAA;AACjD,MAAA,IAAA,CAAA,CAAI,YAAO,KAAM,CAAA,UAAA,KAAb,IAAyB,GAAA,MAAA,GAAA,EAAA,CAAA,GAAA,MAAQ,GAAG,GAAK,EAAA;AAC3C,
|
|
1
|
+
{"version":3,"file":"patchGetAdhocFilters.js","sources":["../../../../src/variables/adhoc/patchGetAdhocFilters.ts"],"sourcesContent":["import { getDataSourceSrv, getTemplateSrv } from '@grafana/runtime';\nimport { AdHocVariableFilter } from '@grafana/data';\nimport { AdHocFiltersVariable, isGroupByFilter } from './AdHocFiltersVariable';\nimport { interpolate } from '../../core/sceneGraph/sceneGraph';\nimport { SceneObject } from '../../core/types';\n\nlet originalGetAdhocFilters: any = undefined;\nexport const allActiveFilterSets = new Set<AdHocFiltersVariable>();\n\nexport function patchGetAdhocFilters(filterVar: AdHocFiltersVariable) {\n filterVar.addActivationHandler(() => {\n allActiveFilterSets.add(filterVar);\n return () => allActiveFilterSets.delete(filterVar);\n });\n\n if (originalGetAdhocFilters) {\n return;\n }\n\n const templateSrv: any = getTemplateSrv();\n if (!templateSrv?.getAdhocFilters) {\n console.log('Failed to patch getAdhocFilters');\n return;\n }\n\n originalGetAdhocFilters = templateSrv.getAdhocFilters;\n\n templateSrv.getAdhocFilters = function getAdhocFiltersScenePatch(dsName: string): AdHocVariableFilter[] {\n if (allActiveFilterSets.size === 0) {\n return originalGetAdhocFilters.call(templateSrv, dsName);\n }\n\n const ds = getDataSourceSrv().getInstanceSettings(dsName);\n if (!ds) {\n return [];\n }\n\n for (const filter of allActiveFilterSets.values()) {\n if (filter.state.datasource?.uid === ds.uid) {\n return filter.state.filters.filter((f) => !isGroupByFilter(f));\n }\n }\n\n return [];\n }.bind(templateSrv);\n}\n\n/**\n * Walk up the scene graph from sceneObject to find the closest AdHocFiltersVariable\n * whose interpolated datasource UID matches dsUid. Use this when adhoc filters can\n * live at multiple levels in the hierarchy.\n */\nexport function findClosestAdHocFilterInHierarchy(\n dsUid: string | undefined,\n sceneObject: SceneObject\n): AdHocFiltersVariable | undefined {\n let current: SceneObject | undefined = sceneObject;\n while (current) {\n const variables = current.state.$variables?.state.variables ?? [];\n for (const variable of variables) {\n if (variable instanceof AdHocFiltersVariable && interpolate(variable, variable.state.datasource?.uid) === dsUid) {\n return variable;\n }\n }\n current = current.parent;\n }\n\n return undefined;\n}\n\n/**\n * Search the global set of active AdHocFiltersVariables for one whose interpolated\n * datasource UID matches dsUid. Use this when no scene hierarchy context is available.\n */\nexport function findGlobalAdHocFilterVariableByUid(dsUid: string | undefined): AdHocFiltersVariable | undefined {\n for (const filter of allActiveFilterSets.values()) {\n if (interpolate(filter, filter.state.datasource?.uid) === dsUid) {\n return filter;\n }\n }\n\n return undefined;\n}\n"],"names":[],"mappings":";;;;AAMA,IAAI,uBAA+B,GAAA,MAAA;AACtB,MAAA,mBAAA,uBAA0B,GAA0B;AAE1D,SAAS,qBAAqB,SAAiC,EAAA;AACpE,EAAA,SAAA,CAAU,qBAAqB,MAAM;AACnC,IAAA,mBAAA,CAAoB,IAAI,SAAS,CAAA;AACjC,IAAO,OAAA,MAAM,mBAAoB,CAAA,MAAA,CAAO,SAAS,CAAA;AAAA,GAClD,CAAA;AAED,EAAA,IAAI,uBAAyB,EAAA;AAC3B,IAAA;AAAA;AAGF,EAAA,MAAM,cAAmB,cAAe,EAAA;AACxC,EAAI,IAAA,EAAC,2CAAa,eAAiB,CAAA,EAAA;AACjC,IAAA,OAAA,CAAQ,IAAI,iCAAiC,CAAA;AAC7C,IAAA;AAAA;AAGF,EAAA,uBAAA,GAA0B,WAAY,CAAA,eAAA;AAEtC,EAAY,WAAA,CAAA,eAAA,GAAkB,SAAS,yBAAA,CAA0B,MAAuC,EAAA;AA3B1G,IAAA,IAAA,EAAA;AA4BI,IAAI,IAAA,mBAAA,CAAoB,SAAS,CAAG,EAAA;AAClC,MAAO,OAAA,uBAAA,CAAwB,IAAK,CAAA,WAAA,EAAa,MAAM,CAAA;AAAA;AAGzD,IAAA,MAAM,EAAK,GAAA,gBAAA,EAAmB,CAAA,mBAAA,CAAoB,MAAM,CAAA;AACxD,IAAA,IAAI,CAAC,EAAI,EAAA;AACP,MAAA,OAAO,EAAC;AAAA;AAGV,IAAW,KAAA,MAAA,MAAA,IAAU,mBAAoB,CAAA,MAAA,EAAU,EAAA;AACjD,MAAA,IAAA,CAAA,CAAI,YAAO,KAAM,CAAA,UAAA,KAAb,IAAyB,GAAA,MAAA,GAAA,EAAA,CAAA,GAAA,MAAQ,GAAG,GAAK,EAAA;AAC3C,QAAO,OAAA,MAAA,CAAO,MAAM,OAAQ,CAAA,MAAA,CAAO,CAAC,CAAM,KAAA,CAAC,eAAgB,CAAA,CAAC,CAAC,CAAA;AAAA;AAC/D;AAGF,IAAA,OAAO,EAAC;AAAA,GACV,CAAE,KAAK,WAAW,CAAA;AACpB;AAOgB,SAAA,iCAAA,CACd,OACA,WACkC,EAAA;AAvDpC,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAwDE,EAAA,IAAI,OAAmC,GAAA,WAAA;AACvC,EAAA,OAAO,OAAS,EAAA;AACd,IAAM,MAAA,SAAA,GAAA,CAAY,mBAAQ,KAAM,CAAA,UAAA,KAAd,mBAA0B,KAAM,CAAA,SAAA,KAAhC,YAA6C,EAAC;AAChE,IAAA,KAAA,MAAW,YAAY,SAAW,EAAA;AAChC,MAAI,IAAA,QAAA,YAAoB,oBAAwB,IAAA,WAAA,CAAY,QAAU,EAAA,CAAA,EAAA,GAAA,QAAA,CAAS,MAAM,UAAf,KAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAA2B,GAAG,CAAA,KAAM,KAAO,EAAA;AAC/G,QAAO,OAAA,QAAA;AAAA;AACT;AAEF,IAAA,OAAA,GAAU,OAAQ,CAAA,MAAA;AAAA;AAGpB,EAAO,OAAA,MAAA;AACT;AAMO,SAAS,mCAAmC,KAA6D,EAAA;AA1EhH,EAAA,IAAA,EAAA;AA2EE,EAAW,KAAA,MAAA,MAAA,IAAU,mBAAoB,CAAA,MAAA,EAAU,EAAA;AACjD,IAAI,IAAA,WAAA,CAAY,SAAQ,EAAO,GAAA,MAAA,CAAA,KAAA,CAAM,eAAb,IAAyB,GAAA,MAAA,GAAA,EAAA,CAAA,GAAG,MAAM,KAAO,EAAA;AAC/D,MAAO,OAAA,MAAA;AAAA;AACT;AAGF,EAAO,OAAA,MAAA;AACT;;;;"}
|