@grafana/scenes 6.40.0--canary.1272.18407272616.0 → 6.40.0--canary.1277.18545717336.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +36 -0
- package/dist/esm/behaviors/SceneRenderProfiler.js +0 -6
- package/dist/esm/behaviors/SceneRenderProfiler.js.map +1 -1
- package/dist/esm/components/SceneTimeRangeCompare.js +17 -14
- package/dist/esm/components/SceneTimeRangeCompare.js.map +1 -1
- package/dist/esm/index.js +0 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/querying/SceneDataTransformer.js +23 -16
- package/dist/esm/querying/SceneDataTransformer.js.map +1 -1
- package/dist/esm/variables/adhoc/AdHocFilterBuilder.js +13 -2
- package/dist/esm/variables/adhoc/AdHocFilterBuilder.js.map +1 -1
- package/dist/esm/variables/adhoc/AdHocFilterRenderer.js +6 -0
- package/dist/esm/variables/adhoc/AdHocFilterRenderer.js.map +1 -1
- package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFilterPill.js +10 -10
- package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFilterPill.js.map +1 -1
- package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersAlwaysWipCombobox.js +6 -6
- package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersAlwaysWipCombobox.js.map +1 -1
- package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersCombobox.js +54 -56
- package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersCombobox.js.map +1 -1
- package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersComboboxRenderer.js +5 -5
- package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersComboboxRenderer.js.map +1 -1
- package/dist/esm/variables/adhoc/AdHocFiltersCombobox/utils.js +4 -4
- package/dist/esm/variables/adhoc/AdHocFiltersCombobox/utils.js.map +1 -1
- package/dist/esm/variables/adhoc/AdHocFiltersVariable.js +2 -4
- package/dist/esm/variables/adhoc/AdHocFiltersVariable.js.map +1 -1
- package/dist/index.d.ts +6 -121
- package/dist/index.js +141 -188
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/dist/esm/variables/adhoc/controller/VariableBackedAdHocFiltersController.js +0 -65
- package/dist/esm/variables/adhoc/controller/VariableBackedAdHocFiltersController.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdHocFiltersComboboxRenderer.js","sources":["../../../../../src/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersComboboxRenderer.tsx"],"sourcesContent":["import { css, cx } from '@emotion/css';\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Icon, useStyles2 } from '@grafana/ui';\nimport React, { memo, useRef } from 'react';\nimport {
|
|
1
|
+
{"version":3,"file":"AdHocFiltersComboboxRenderer.js","sources":["../../../../../src/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersComboboxRenderer.tsx"],"sourcesContent":["import { css, cx } from '@emotion/css';\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Icon, useStyles2 } from '@grafana/ui';\nimport React, { memo, useRef } from 'react';\nimport { AdHocFiltersVariable } from '../AdHocFiltersVariable';\nimport { AdHocFilterPill } from './AdHocFilterPill';\nimport { AdHocFiltersAlwaysWipCombobox } from './AdHocFiltersAlwaysWipCombobox';\n\ninterface Props {\n model: AdHocFiltersVariable;\n}\n\nexport const AdHocFiltersComboboxRenderer = memo(function AdHocFiltersComboboxRenderer({ model }: Props) {\n const { originFilters, filters, readOnly } = model.useState();\n const styles = useStyles2(getStyles);\n\n // ref that focuses on the always wip filter input\n // defined in the combobox component via useImperativeHandle\n const focusOnWipInputRef = useRef<() => void>();\n\n return (\n <div\n className={cx(styles.comboboxWrapper, { [styles.comboboxFocusOutline]: !readOnly })}\n onClick={() => {\n focusOnWipInputRef.current?.();\n }}\n >\n <Icon name=\"filter\" className={styles.filterIcon} size=\"lg\" />\n\n {originFilters?.map((filter, index) =>\n filter.origin ? (\n <AdHocFilterPill\n key={`${index}-${filter.key}`}\n filter={filter}\n model={model}\n focusOnWipInputRef={focusOnWipInputRef.current}\n />\n ) : null\n )}\n\n {filters\n .filter((filter) => !filter.hidden)\n .map((filter, index) => (\n <AdHocFilterPill\n key={`${index}-${filter.key}`}\n filter={filter}\n model={model}\n readOnly={readOnly || filter.readOnly}\n focusOnWipInputRef={focusOnWipInputRef.current}\n />\n ))}\n\n {!readOnly ? <AdHocFiltersAlwaysWipCombobox model={model} ref={focusOnWipInputRef} /> : null}\n </div>\n );\n});\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n comboboxWrapper: css({\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'center',\n columnGap: theme.spacing(1),\n rowGap: theme.spacing(0.5),\n minHeight: theme.spacing(4),\n backgroundColor: theme.components.input.background,\n border: `1px solid ${theme.colors.border.strong}`,\n borderRadius: theme.shape.radius.default,\n paddingInline: theme.spacing(1),\n paddingBlock: theme.spacing(0.5),\n flexGrow: 1,\n }),\n comboboxFocusOutline: css({\n '&:focus-within': {\n outline: '2px dotted transparent',\n outlineOffset: '2px',\n boxShadow: `0 0 0 2px ${theme.colors.background.canvas}, 0 0 0px 4px ${theme.colors.primary.main}`,\n transitionTimingFunction: `cubic-bezier(0.19, 1, 0.22, 1)`,\n transitionDuration: '0.2s',\n transitionProperty: 'outline, outline-offset, box-shadow',\n zIndex: 2,\n },\n }),\n filterIcon: css({\n color: theme.colors.text.secondary,\n alignSelf: 'center',\n }),\n});\n"],"names":["AdHocFiltersComboboxRenderer"],"mappings":"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"}
|
|
@@ -105,11 +105,11 @@ const generateFilterUpdatePayload = ({
|
|
|
105
105
|
[filterInputType]: item.value
|
|
106
106
|
};
|
|
107
107
|
};
|
|
108
|
-
const
|
|
109
|
-
const generatePlaceholder = (filter, filterInputType, isMultiValueEdit, isAlwaysWip
|
|
108
|
+
const INPUT_PLACEHOLDER = "Filter by label values";
|
|
109
|
+
const generatePlaceholder = (filter, filterInputType, isMultiValueEdit, isAlwaysWip) => {
|
|
110
110
|
var _a;
|
|
111
111
|
if (filterInputType === "key") {
|
|
112
|
-
return
|
|
112
|
+
return INPUT_PLACEHOLDER;
|
|
113
113
|
}
|
|
114
114
|
if (filterInputType === "value") {
|
|
115
115
|
if (isMultiValueEdit) {
|
|
@@ -117,7 +117,7 @@ const generatePlaceholder = (filter, filterInputType, isMultiValueEdit, isAlways
|
|
|
117
117
|
}
|
|
118
118
|
return ((_a = filter.valueLabels) == null ? void 0 : _a[0]) || "";
|
|
119
119
|
}
|
|
120
|
-
return filter[filterInputType] && !isAlwaysWip ? `${filter[filterInputType]}` :
|
|
120
|
+
return filter[filterInputType] && !isAlwaysWip ? `${filter[filterInputType]}` : INPUT_PLACEHOLDER;
|
|
121
121
|
};
|
|
122
122
|
const populateInputValueOnInputTypeSwitch = ({
|
|
123
123
|
populateInputOnEdit,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["../../../../../src/variables/adhoc/AdHocFiltersCombobox/utils.ts"],"sourcesContent":["import { SelectableValue } from '@grafana/data';\nimport { AdHocInputType } from './AdHocFiltersCombobox';\nimport { AdHocFilterWithLabels, isMultiValueOperator, OnAddCustomValueFn } from '../AdHocFiltersVariable';\n\nconst VIRTUAL_LIST_WIDTH_ESTIMATE_MULTIPLIER = 8;\nconst VIRTUAL_LIST_DESCRIPTION_WIDTH_ESTIMATE_MULTIPLIER = 6;\nconst VIRTUAL_LIST_PADDING = 8;\nexport const VIRTUAL_LIST_OVERSCAN = 5;\nexport const VIRTUAL_LIST_ITEM_HEIGHT = 38;\nexport const VIRTUAL_LIST_ITEM_HEIGHT_WITH_DESCRIPTION = 60;\nexport const ERROR_STATE_DROPDOWN_WIDTH = 366;\n\nexport const flattenOptionGroups = (options: Array<SelectableValue<string>>) =>\n options.flatMap<SelectableValue<string>>((option) => (option.options ? [option, ...option.options] : [option]));\n\nexport const setupDropdownAccessibility = (\n options: Array<SelectableValue<string>>,\n listRef: React.MutableRefObject<Array<HTMLElement | null>>,\n disabledIndicesRef: React.MutableRefObject<number[]>\n) => {\n let maxOptionWidth = 182;\n const listRefArr = [];\n const disabledIndices = [];\n\n for (let i = 0; i < options.length; i++) {\n // listRefArr should be filled with nulls for amount of dropdown items so that\n // useNavigationList sets activeIndex correctly when navigating with arrow keys\n listRefArr.push(null);\n\n // disabledIndices are used to skip unselectable group items in dropdown when\n // navigating with arrow keys\n if (options[i]?.options) {\n disabledIndices.push(i);\n }\n let label = options[i].label ?? options[i].value ?? '';\n let multiplierToUse = VIRTUAL_LIST_WIDTH_ESTIMATE_MULTIPLIER;\n if (\n label.length * VIRTUAL_LIST_WIDTH_ESTIMATE_MULTIPLIER <\n (options[i].description?.length || 0) * VIRTUAL_LIST_DESCRIPTION_WIDTH_ESTIMATE_MULTIPLIER\n ) {\n label = options[i].description!;\n multiplierToUse = VIRTUAL_LIST_DESCRIPTION_WIDTH_ESTIMATE_MULTIPLIER;\n }\n\n // rough widthEstimate\n const widthEstimate =\n (options[i].isCustom ? label.length + 18 : label.length) * multiplierToUse + VIRTUAL_LIST_PADDING * 2;\n if (widthEstimate > maxOptionWidth) {\n maxOptionWidth = widthEstimate;\n }\n }\n\n listRef.current = [...listRefArr];\n disabledIndicesRef.current = [...disabledIndices];\n return maxOptionWidth;\n};\n\nconst nextInputTypeMap = {\n key: 'operator',\n operator: 'value',\n value: 'key',\n} as const;\n\nexport const switchToNextInputType = (\n filterInputType: AdHocInputType,\n setInputType: React.Dispatch<React.SetStateAction<AdHocInputType>>,\n handleChangeViewMode: ((event?: React.MouseEvent, shouldFocusOnFilterPill?: boolean) => void) | undefined,\n element: HTMLInputElement | null,\n shouldFocusOnPillWrapperOverride?: boolean\n) =>\n switchInputType(\n nextInputTypeMap[filterInputType],\n setInputType,\n filterInputType === 'value' ? handleChangeViewMode : undefined,\n element,\n shouldFocusOnPillWrapperOverride\n );\n\nexport const switchInputType = (\n filterInputType: AdHocInputType,\n setInputType: React.Dispatch<React.SetStateAction<AdHocInputType>>,\n handleChangeViewMode?: (event?: React.MouseEvent, shouldFocusOnFilterPill?: boolean) => void,\n element?: HTMLInputElement | null,\n shouldFocusOnPillWrapperOverride?: boolean\n) => {\n setInputType(filterInputType);\n\n handleChangeViewMode?.(undefined, shouldFocusOnPillWrapperOverride);\n\n setTimeout(() => element?.focus());\n};\n\nexport const generateFilterUpdatePayload = ({\n filterInputType,\n item,\n filter,\n setFilterMultiValues,\n onAddCustomValue,\n}: {\n filterInputType: AdHocInputType;\n item: SelectableValue<string>;\n filter: AdHocFilterWithLabels;\n setFilterMultiValues: (value: React.SetStateAction<Array<SelectableValue<string>>>) => void;\n onAddCustomValue?: OnAddCustomValueFn;\n}): Partial<AdHocFilterWithLabels> => {\n if (filterInputType === 'key') {\n return {\n key: item.value,\n keyLabel: item.label ? item.label : item.value,\n meta: item?.meta,\n };\n }\n if (filterInputType === 'value') {\n if (item.isCustom && onAddCustomValue) {\n return onAddCustomValue(item, filter);\n }\n return {\n value: item.value,\n valueLabels: [item.label ? item.label : item.value!],\n };\n }\n\n if (filterInputType === 'operator') {\n // handle values/valueLabels when switching from multi to single value operator\n if (isMultiValueOperator(filter.operator) && !isMultiValueOperator(item.value!)) {\n // reset local multi values state\n setFilterMultiValues([]);\n // update operator and reset values and valueLabels\n return {\n operator: item.value,\n valueLabels: [filter.valueLabels?.[0] || filter.values?.[0] || filter.value],\n values: undefined,\n };\n }\n\n // handle values/valueLabels when switching from single to multi value operator\n if (isMultiValueOperator(item.value!) && !isMultiValueOperator(filter.operator)) {\n const valueLabels = [filter.valueLabels?.[0] || filter.values?.[0] || filter.value];\n const values = [filter.value];\n\n // populate local multi values state\n if (values[0]) {\n setFilterMultiValues([\n {\n value: values[0],\n label: valueLabels?.[0] ?? values[0],\n },\n ]);\n }\n\n // update operator and default values and valueLabels\n return {\n operator: item.value,\n valueLabels: valueLabels,\n values: values,\n };\n }\n }\n\n // default operator update of same multi/single type\n return {\n [filterInputType]: item.value,\n };\n};\n\nconst INPUT_PLACEHOLDER_DEFAULT = 'Filter by label values';\n\nexport const generatePlaceholder = (\n filter: AdHocFilterWithLabels,\n filterInputType: AdHocInputType,\n isMultiValueEdit: boolean,\n isAlwaysWip?: boolean,\n inputPlaceholder?: string\n) => {\n if (filterInputType === 'key') {\n return inputPlaceholder || INPUT_PLACEHOLDER_DEFAULT;\n }\n if (filterInputType === 'value') {\n if (isMultiValueEdit) {\n return 'Edit values';\n }\n return filter.valueLabels?.[0] || '';\n }\n\n return filter[filterInputType] && !isAlwaysWip\n ? `${filter[filterInputType]}`\n : inputPlaceholder || INPUT_PLACEHOLDER_DEFAULT;\n};\n\nexport const populateInputValueOnInputTypeSwitch = ({\n populateInputOnEdit,\n item,\n filterInputType,\n setInputValue,\n filter,\n}: {\n populateInputOnEdit: boolean | undefined;\n item: SelectableValue<string>;\n filterInputType: AdHocInputType;\n setInputValue: (value: React.SetStateAction<string>) => void;\n filter: AdHocFilterWithLabels | undefined;\n}) => {\n if (populateInputOnEdit && !isMultiValueOperator(item.value || '') && nextInputTypeMap[filterInputType] === 'value') {\n setInputValue(filter?.valueLabels?.[0] ?? filter?.value ?? '');\n } else {\n setInputValue('');\n }\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../../../../../src/variables/adhoc/AdHocFiltersCombobox/utils.ts"],"sourcesContent":["import { SelectableValue } from '@grafana/data';\nimport { AdHocInputType } from './AdHocFiltersCombobox';\nimport { AdHocFilterWithLabels, isMultiValueOperator, OnAddCustomValueFn } from '../AdHocFiltersVariable';\n\nconst VIRTUAL_LIST_WIDTH_ESTIMATE_MULTIPLIER = 8;\nconst VIRTUAL_LIST_DESCRIPTION_WIDTH_ESTIMATE_MULTIPLIER = 6;\nconst VIRTUAL_LIST_PADDING = 8;\nexport const VIRTUAL_LIST_OVERSCAN = 5;\nexport const VIRTUAL_LIST_ITEM_HEIGHT = 38;\nexport const VIRTUAL_LIST_ITEM_HEIGHT_WITH_DESCRIPTION = 60;\nexport const ERROR_STATE_DROPDOWN_WIDTH = 366;\n\nexport const flattenOptionGroups = (options: Array<SelectableValue<string>>) =>\n options.flatMap<SelectableValue<string>>((option) => (option.options ? [option, ...option.options] : [option]));\n\nexport const setupDropdownAccessibility = (\n options: Array<SelectableValue<string>>,\n listRef: React.MutableRefObject<Array<HTMLElement | null>>,\n disabledIndicesRef: React.MutableRefObject<number[]>\n) => {\n let maxOptionWidth = 182;\n const listRefArr = [];\n const disabledIndices = [];\n\n for (let i = 0; i < options.length; i++) {\n // listRefArr should be filled with nulls for amount of dropdown items so that\n // useNavigationList sets activeIndex correctly when navigating with arrow keys\n listRefArr.push(null);\n\n // disabledIndices are used to skip unselectable group items in dropdown when\n // navigating with arrow keys\n if (options[i]?.options) {\n disabledIndices.push(i);\n }\n let label = options[i].label ?? options[i].value ?? '';\n let multiplierToUse = VIRTUAL_LIST_WIDTH_ESTIMATE_MULTIPLIER;\n if (\n label.length * VIRTUAL_LIST_WIDTH_ESTIMATE_MULTIPLIER <\n (options[i].description?.length || 0) * VIRTUAL_LIST_DESCRIPTION_WIDTH_ESTIMATE_MULTIPLIER\n ) {\n label = options[i].description!;\n multiplierToUse = VIRTUAL_LIST_DESCRIPTION_WIDTH_ESTIMATE_MULTIPLIER;\n }\n\n // rough widthEstimate\n const widthEstimate =\n (options[i].isCustom ? label.length + 18 : label.length) * multiplierToUse + VIRTUAL_LIST_PADDING * 2;\n if (widthEstimate > maxOptionWidth) {\n maxOptionWidth = widthEstimate;\n }\n }\n\n listRef.current = [...listRefArr];\n disabledIndicesRef.current = [...disabledIndices];\n return maxOptionWidth;\n};\n\nconst nextInputTypeMap = {\n key: 'operator',\n operator: 'value',\n value: 'key',\n} as const;\n\nexport const switchToNextInputType = (\n filterInputType: AdHocInputType,\n setInputType: React.Dispatch<React.SetStateAction<AdHocInputType>>,\n handleChangeViewMode: ((event?: React.MouseEvent, shouldFocusOnFilterPill?: boolean) => void) | undefined,\n element: HTMLInputElement | null,\n shouldFocusOnPillWrapperOverride?: boolean\n) =>\n switchInputType(\n nextInputTypeMap[filterInputType],\n setInputType,\n filterInputType === 'value' ? handleChangeViewMode : undefined,\n element,\n shouldFocusOnPillWrapperOverride\n );\n\nexport const switchInputType = (\n filterInputType: AdHocInputType,\n setInputType: React.Dispatch<React.SetStateAction<AdHocInputType>>,\n handleChangeViewMode?: (event?: React.MouseEvent, shouldFocusOnFilterPill?: boolean) => void,\n element?: HTMLInputElement | null,\n shouldFocusOnPillWrapperOverride?: boolean\n) => {\n setInputType(filterInputType);\n\n handleChangeViewMode?.(undefined, shouldFocusOnPillWrapperOverride);\n\n setTimeout(() => element?.focus());\n};\n\nexport const generateFilterUpdatePayload = ({\n filterInputType,\n item,\n filter,\n setFilterMultiValues,\n onAddCustomValue,\n}: {\n filterInputType: AdHocInputType;\n item: SelectableValue<string>;\n filter: AdHocFilterWithLabels;\n setFilterMultiValues: (value: React.SetStateAction<Array<SelectableValue<string>>>) => void;\n onAddCustomValue?: OnAddCustomValueFn;\n}): Partial<AdHocFilterWithLabels> => {\n if (filterInputType === 'key') {\n return {\n key: item.value,\n keyLabel: item.label ? item.label : item.value,\n meta: item?.meta,\n };\n }\n if (filterInputType === 'value') {\n if (item.isCustom && onAddCustomValue) {\n return onAddCustomValue(item, filter);\n }\n return {\n value: item.value,\n valueLabels: [item.label ? item.label : item.value!],\n };\n }\n\n if (filterInputType === 'operator') {\n // handle values/valueLabels when switching from multi to single value operator\n if (isMultiValueOperator(filter.operator) && !isMultiValueOperator(item.value!)) {\n // reset local multi values state\n setFilterMultiValues([]);\n // update operator and reset values and valueLabels\n return {\n operator: item.value,\n valueLabels: [filter.valueLabels?.[0] || filter.values?.[0] || filter.value],\n values: undefined,\n };\n }\n\n // handle values/valueLabels when switching from single to multi value operator\n if (isMultiValueOperator(item.value!) && !isMultiValueOperator(filter.operator)) {\n const valueLabels = [filter.valueLabels?.[0] || filter.values?.[0] || filter.value];\n const values = [filter.value];\n\n // populate local multi values state\n if (values[0]) {\n setFilterMultiValues([\n {\n value: values[0],\n label: valueLabels?.[0] ?? values[0],\n },\n ]);\n }\n\n // update operator and default values and valueLabels\n return {\n operator: item.value,\n valueLabels: valueLabels,\n values: values,\n };\n }\n }\n\n // default operator update of same multi/single type\n return {\n [filterInputType]: item.value,\n };\n};\n\nconst INPUT_PLACEHOLDER = 'Filter by label values';\n\nexport const generatePlaceholder = (\n filter: AdHocFilterWithLabels,\n filterInputType: AdHocInputType,\n isMultiValueEdit: boolean,\n isAlwaysWip?: boolean\n) => {\n if (filterInputType === 'key') {\n return INPUT_PLACEHOLDER;\n }\n if (filterInputType === 'value') {\n if (isMultiValueEdit) {\n return 'Edit values';\n }\n return filter.valueLabels?.[0] || '';\n }\n\n return filter[filterInputType] && !isAlwaysWip ? `${filter[filterInputType]}` : INPUT_PLACEHOLDER;\n};\n\nexport const populateInputValueOnInputTypeSwitch = ({\n populateInputOnEdit,\n item,\n filterInputType,\n setInputValue,\n filter,\n}: {\n populateInputOnEdit: boolean | undefined;\n item: SelectableValue<string>;\n filterInputType: AdHocInputType;\n setInputValue: (value: React.SetStateAction<string>) => void;\n filter: AdHocFilterWithLabels | undefined;\n}) => {\n if (populateInputOnEdit && !isMultiValueOperator(item.value || '') && nextInputTypeMap[filterInputType] === 'value') {\n setInputValue(filter?.valueLabels?.[0] ?? filter?.value ?? '');\n } else {\n setInputValue('');\n }\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React
|
|
1
|
+
import React from 'react';
|
|
2
2
|
import { SceneObjectBase } from '../../core/SceneObjectBase.js';
|
|
3
3
|
import { SceneVariableValueChangedEvent } from '../types.js';
|
|
4
4
|
import { getQueriesForVariables, dataFromResponse, responseHasError, renderPrometheusLabelFilters } from '../utils.js';
|
|
@@ -18,7 +18,6 @@ import { getAdHocFiltersFromScopes } from './getAdHocFiltersFromScopes.js';
|
|
|
18
18
|
import { VariableDependencyConfig } from '../VariableDependencyConfig.js';
|
|
19
19
|
import { getQueryController } from '../../core/sceneGraph/getQueryController.js';
|
|
20
20
|
import { FILTER_RESTORED_INTERACTION, FILTER_REMOVED_INTERACTION } from '../../behaviors/SceneRenderProfiler.js';
|
|
21
|
-
import { VariableBackedAdHocFiltersController } from './controller/VariableBackedAdHocFiltersController.js';
|
|
22
21
|
|
|
23
22
|
const OPERATORS = [
|
|
24
23
|
{
|
|
@@ -495,9 +494,8 @@ function renderExpression(builder, filters) {
|
|
|
495
494
|
function AdHocFiltersVariableRenderer({ model }) {
|
|
496
495
|
const { filters, readOnly, addFilterButtonText } = model.useState();
|
|
497
496
|
const styles = useStyles2(getStyles);
|
|
498
|
-
const controller = useMemo(() => new VariableBackedAdHocFiltersController(model), [model]);
|
|
499
497
|
if (model.state.layout === "combobox") {
|
|
500
|
-
return /* @__PURE__ */ React.createElement(AdHocFiltersComboboxRenderer, {
|
|
498
|
+
return /* @__PURE__ */ React.createElement(AdHocFiltersComboboxRenderer, { model });
|
|
501
499
|
}
|
|
502
500
|
return /* @__PURE__ */ React.createElement("div", { className: styles.wrapper }, filters.filter((filter) => !filter.hidden).map((filter, index) => /* @__PURE__ */ React.createElement(React.Fragment, { key: index }, /* @__PURE__ */ React.createElement(AdHocFilterRenderer, { filter, model }))), !readOnly && /* @__PURE__ */ React.createElement(AdHocFilterBuilder, { model, key: "'builder", addFilterButtonText }));
|
|
503
501
|
}
|
|
@@ -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 } from '../../core/types';\nimport { DataSourceRef } from '@grafana/schema';\nimport { dataFromResponse, getQueriesForVariables, renderPrometheusLabelFilters, responseHasError } from '../utils';\nimport { patchGetAdhocFilters } from './patchGetAdhocFilters';\nimport { useStyles2 } from '@grafana/ui';\nimport { sceneGraph } from '../../core/sceneGraph';\nimport { AdHocFilterBuilder } from './AdHocFilterBuilder';\nimport { AdHocFilterRenderer } from './AdHocFilterRenderer';\nimport { getDataSourceSrv } from '@grafana/runtime';\nimport { AdHocFiltersVariableUrlSyncHandler } from './AdHocFiltersVariableUrlSyncHandler';\nimport { css } from '@emotion/css';\nimport { getEnrichedFiltersRequest } from '../getEnrichedFiltersRequest';\nimport { AdHocFiltersComboboxRenderer } from './AdHocFiltersCombobox/AdHocFiltersComboboxRenderer';\nimport { wrapInSafeSerializableSceneObject } from '../../utils/wrapInSafeSerializableSceneObject';\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 '../../behaviors/SceneRenderProfiler';\nimport { VariableBackedAdHocFiltersController } from './controller/VariableBackedAdHocFiltersController';\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\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 /** 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 value lookup.\n * Return replace: true if you want to override the default lookup.\n * Return replace: false if you want to combine the results with the default lookup\n */\n getTagValuesProvider?: getTagValuesProvider;\n\n /**\n * Optionally provide an array of static keys that override getTagKeys\n */\n defaultKeys?: MetricFindValue[];\n\n /**\n * This is the expression that the filters resulted in. Defaults to\n * Prometheus / Loki compatible label filter expression\n */\n filterExpression?: string;\n\n /**\n * The default builder creates a Prometheus/Loki compatible filter expression,\n * this can be overridden to create a different expression based on the current filters.\n */\n expressionBuilder?: AdHocVariableExpressionBuilderFn;\n\n /**\n * Whether the filter supports new multi-value operators like =| and !=|\n */\n supportsMultiValueOperators?: boolean;\n\n /**\n * When querying the datasource for label names and values to determine keys and values\n * for this ad hoc filter, consider the queries in the scene and use them as a filter.\n * This queries filter can be used to ensure that only ad hoc filter options that would\n * impact the current queries are presented to the user.\n */\n useQueriesAsFilterForOptions?: boolean;\n\n /**\n * Flag that decides whether custom values can be added to the filter\n */\n allowCustomValue?: boolean;\n\n /**\n * @internal state of the new filter being added\n */\n _wip?: AdHocFilterWithLabels;\n\n /**\n * Allows custom formatting of a value before saving to filter state\n */\n onAddCustomValue?: OnAddCustomValueFn;\n}\n\nexport type AdHocVariableExpressionBuilderFn = (filters: AdHocFilterWithLabels[]) => string;\nexport type OnAddCustomValueFn = (\n item: SelectableValue<string> & { isCustom?: boolean },\n filter: AdHocFilterWithLabels\n) => { value: string | undefined; valueLabels: string[] };\n\nexport type getTagKeysProvider = (\n variable: AdHocFiltersVariable,\n currentKey: string | null,\n operators?: OperatorDefinition[]\n) => Promise<{ replace?: boolean; values: GetTagResponse | MetricFindValue[] }>;\n\nexport type getTagValuesProvider = (\n variable: AdHocFiltersVariable,\n filter: AdHocFilterWithLabels\n) => Promise<{ replace?: boolean; values: GetTagResponse | MetricFindValue[] }>;\n\nexport type AdHocFiltersVariableCreateHelperArgs = AdHocFiltersVariableState;\n\nexport type OperatorDefinition = {\n value: string;\n description?: string;\n isMulti?: Boolean;\n isRegex?: Boolean;\n};\n\nexport const OPERATORS: OperatorDefinition[] = [\n {\n value: '=',\n description: 'Equals',\n },\n {\n value: '!=',\n description: 'Not equal',\n },\n {\n value: '=|',\n description: 'One of. Use to filter on multiple values.',\n isMulti: true,\n },\n {\n value: '!=|',\n description: 'Not one of. Use to exclude multiple values.',\n isMulti: true,\n },\n {\n value: '=~',\n description: 'Matches regex',\n isRegex: true,\n },\n {\n value: '!~',\n description: 'Does not match regex',\n isRegex: true,\n },\n {\n value: '<',\n description: 'Less than',\n },\n {\n value: '<=',\n description: '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 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 public constructor(state: Partial<AdHocFiltersVariableState>) {\n super({\n type: 'adhoc',\n name: state.name ?? 'Filters',\n filters: [],\n datasource: null,\n applyMode: 'auto',\n filterExpression:\n state.filterExpression ??\n renderExpression(state.expressionBuilder, [...(state.originFilters ?? []), ...(state.filters ?? [])]),\n ...state,\n });\n\n if (this.state.applyMode === 'auto') {\n patchGetAdhocFilters(this);\n }\n\n this.state.originFilters?.forEach((filter) => {\n this._originalValues.set(`${filter.key}-${filter.origin}`, {\n operator: filter.operator,\n value: filter.values ?? [filter.value],\n });\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 };\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._originalValues.set(`${scopeFilter.key}-${scopeFilter.origin}`, {\n value: scopeFilter.values ?? [scopeFilter.value],\n operator: scopeFilter.operator,\n });\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 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 /**\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 public restoreOriginalFilter(filter: AdHocFilterWithLabels) {\n const original: Partial<AdHocFilterWithLabels> = {\n matchAllFilter: false,\n restorable: false,\n };\n\n if (filter.restorable) {\n const originalFilter = this._originalValues.get(`${filter.key}-${filter.origin}`);\n\n if (!originalFilter) {\n return;\n }\n\n original.value = originalFilter?.value[0];\n original.values = originalFilter?.value;\n original.valueLabels = originalFilter?.value;\n original.operator = originalFilter?.operator;\n original.nonApplicable = originalFilter?.nonApplicable;\n const queryController = getQueryController(this);\n queryController?.startProfile(FILTER_RESTORED_INTERACTION);\n this._updateFilter(filter, original);\n }\n }\n\n public getValue(): VariableValue | undefined {\n return this.state.filterExpression;\n }\n\n public _updateFilter(filter: AdHocFilterWithLabels, update: Partial<AdHocFilterWithLabels>) {\n const { originFilters, filters, _wip } = this.state;\n\n if (filter.origin) {\n const originalValues = this._originalValues.get(`${filter.key}-${filter.origin}`);\n const updateValues = update.values || (update.value ? [update.value] : undefined);\n\n if (\n (updateValues && !isEqual(updateValues, originalValues?.value)) ||\n (update.operator && update.operator !== originalValues?.operator)\n ) {\n update.restorable = true;\n } else if (updateValues && isEqual(updateValues, originalValues?.value)) {\n update.restorable = false;\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({ filters: [...filters, { ..._wip, ...update }], _wip: undefined });\n this._debouncedVerifyApplicability();\n } else {\n this.setState({ _wip: { ...filter, ...update } });\n }\n return;\n }\n\n const updatedFilters = this.state.filters.map((f) => {\n return f === filter ? { ...f, ...update } : f;\n });\n\n this.setState({ filters: updatedFilters });\n }\n\n public 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 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 (this.state.filters.length) {\n // default forceEdit last filter (when triggering from wip filter)\n let filterToForceIndex = this.state.filters.length - 1;\n\n // adjust filterToForceIndex index to -1 if backspace triggered from non wip filter\n // to avoid triggering forceEdit logic\n if (filter !== this.state._wip) {\n filterToForceIndex = -1;\n }\n\n this.setState({\n filters: this.state.filters.reduce<AdHocFilterWithLabels[]>((acc, f, index) => {\n // adjust forceEdit of preceding filter if not readOnly\n if (index === filterToForceIndex && !f.readOnly) {\n return [\n ...acc,\n {\n ...f,\n forceEdit: true,\n },\n ];\n }\n // remove current filter\n if (f === filter) {\n return acc;\n }\n\n return [...acc, f];\n }, []),\n });\n } else if (this.state.originFilters?.length) {\n // default forceEdit last filter (when triggering from wip filter)\n let filterToForceIndex = this.state.originFilters.length - 1;\n\n // adjust filterToForceIndex index to -1 if backspace triggered from non wip filter\n // to avoid triggering forceEdit logic\n if (filter !== this.state._wip) {\n filterToForceIndex = -1;\n }\n\n this.setState({\n originFilters: this.state.originFilters.reduce<AdHocFilterWithLabels[]>((acc, f, index) => {\n // adjust forceEdit of preceding filter\n if (index === filterToForceIndex && !f.readOnly) {\n return [\n ...acc,\n {\n ...f,\n forceEdit: true,\n },\n ];\n }\n // remove current filter\n if (f === filter) {\n return acc;\n }\n\n return [...acc, f];\n }, []),\n });\n }\n }\n\n public async _verifyApplicability() {\n const filters = [...this.state.filters, ...(this.state.originFilters ?? [])];\n\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 if (!filters) {\n return;\n }\n\n const timeRange = sceneGraph.getTimeRange(this).state.value;\n const queries = this.state.useQueriesAsFilterForOptions ? getQueriesForVariables(this) : undefined;\n\n // @ts-expect-error (temporary till we update grafana/data)\n const response: DrilldownsApplicability[] = await ds.getDrilldownsApplicability({\n filters,\n queries,\n timeRange,\n scopes: sceneGraph.getScopes(this),\n ...getEnrichedFiltersRequest(this),\n });\n\n const responseMap = new Map<string, DrilldownsApplicability>();\n response.forEach((filter) => {\n responseMap.set(`${filter.key}${filter.origin ? `-${filter.origin}` : ''}`, filter);\n });\n\n const update = {\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 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(() => new VariableBackedAdHocFiltersController(model), [model]);\n\n if (model.state.layout === 'combobox') {\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 isFilterComplete(filter: AdHocFilterWithLabels): boolean {\n return filter.key !== '' && filter.operator !== '' && filter.value !== '';\n}\n\nexport function isFilterApplicable(filter: AdHocFilterWithLabels): boolean {\n return !filter.nonApplicable;\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":["_a","updatedFilters"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AdHocFiltersVariable.js","sources":["../../../../src/variables/adhoc/AdHocFiltersVariable.tsx"],"sourcesContent":["import React 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 } from '../../core/types';\nimport { DataSourceRef } from '@grafana/schema';\nimport { dataFromResponse, getQueriesForVariables, renderPrometheusLabelFilters, responseHasError } from '../utils';\nimport { patchGetAdhocFilters } from './patchGetAdhocFilters';\nimport { useStyles2 } from '@grafana/ui';\nimport { sceneGraph } from '../../core/sceneGraph';\nimport { AdHocFilterBuilder } from './AdHocFilterBuilder';\nimport { AdHocFilterRenderer } from './AdHocFilterRenderer';\nimport { getDataSourceSrv } from '@grafana/runtime';\nimport { AdHocFiltersVariableUrlSyncHandler } from './AdHocFiltersVariableUrlSyncHandler';\nimport { css } from '@emotion/css';\nimport { getEnrichedFiltersRequest } from '../getEnrichedFiltersRequest';\nimport { AdHocFiltersComboboxRenderer } from './AdHocFiltersCombobox/AdHocFiltersComboboxRenderer';\nimport { wrapInSafeSerializableSceneObject } from '../../utils/wrapInSafeSerializableSceneObject';\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 '../../behaviors/SceneRenderProfiler';\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\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 /** 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 value lookup.\n * Return replace: true if you want to override the default lookup.\n * Return replace: false if you want to combine the results with the default lookup\n */\n getTagValuesProvider?: getTagValuesProvider;\n\n /**\n * Optionally provide an array of static keys that override getTagKeys\n */\n defaultKeys?: MetricFindValue[];\n\n /**\n * This is the expression that the filters resulted in. Defaults to\n * Prometheus / Loki compatible label filter expression\n */\n filterExpression?: string;\n\n /**\n * The default builder creates a Prometheus/Loki compatible filter expression,\n * this can be overridden to create a different expression based on the current filters.\n */\n expressionBuilder?: AdHocVariableExpressionBuilderFn;\n\n /**\n * Whether the filter supports new multi-value operators like =| and !=|\n */\n supportsMultiValueOperators?: boolean;\n\n /**\n * When querying the datasource for label names and values to determine keys and values\n * for this ad hoc filter, consider the queries in the scene and use them as a filter.\n * This queries filter can be used to ensure that only ad hoc filter options that would\n * impact the current queries are presented to the user.\n */\n useQueriesAsFilterForOptions?: boolean;\n\n /**\n * Flag that decides whether custom values can be added to the filter\n */\n allowCustomValue?: boolean;\n\n /**\n * @internal state of the new filter being added\n */\n _wip?: AdHocFilterWithLabels;\n\n /**\n * Allows custom formatting of a value before saving to filter state\n */\n onAddCustomValue?: OnAddCustomValueFn;\n}\n\nexport type AdHocVariableExpressionBuilderFn = (filters: AdHocFilterWithLabels[]) => string;\nexport type OnAddCustomValueFn = (\n item: SelectableValue<string> & { isCustom?: boolean },\n filter: AdHocFilterWithLabels\n) => { value: string | undefined; valueLabels: string[] };\n\nexport type getTagKeysProvider = (\n variable: AdHocFiltersVariable,\n currentKey: string | null,\n operators?: OperatorDefinition[]\n) => Promise<{ replace?: boolean; values: GetTagResponse | MetricFindValue[] }>;\n\nexport type getTagValuesProvider = (\n variable: AdHocFiltersVariable,\n filter: AdHocFilterWithLabels\n) => Promise<{ replace?: boolean; values: GetTagResponse | MetricFindValue[] }>;\n\nexport type AdHocFiltersVariableCreateHelperArgs = AdHocFiltersVariableState;\n\nexport type OperatorDefinition = {\n value: string;\n description?: string;\n isMulti?: Boolean;\n isRegex?: Boolean;\n};\n\nexport const OPERATORS: OperatorDefinition[] = [\n {\n value: '=',\n description: 'Equals',\n },\n {\n value: '!=',\n description: 'Not equal',\n },\n {\n value: '=|',\n description: 'One of. Use to filter on multiple values.',\n isMulti: true,\n },\n {\n value: '!=|',\n description: 'Not one of. Use to exclude multiple values.',\n isMulti: true,\n },\n {\n value: '=~',\n description: 'Matches regex',\n isRegex: true,\n },\n {\n value: '!~',\n description: 'Does not match regex',\n isRegex: true,\n },\n {\n value: '<',\n description: 'Less than',\n },\n {\n value: '<=',\n description: '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 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 public constructor(state: Partial<AdHocFiltersVariableState>) {\n super({\n type: 'adhoc',\n name: state.name ?? 'Filters',\n filters: [],\n datasource: null,\n applyMode: 'auto',\n filterExpression:\n state.filterExpression ??\n renderExpression(state.expressionBuilder, [...(state.originFilters ?? []), ...(state.filters ?? [])]),\n ...state,\n });\n\n if (this.state.applyMode === 'auto') {\n patchGetAdhocFilters(this);\n }\n\n this.state.originFilters?.forEach((filter) => {\n this._originalValues.set(`${filter.key}-${filter.origin}`, {\n operator: filter.operator,\n value: filter.values ?? [filter.value],\n });\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 };\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._originalValues.set(`${scopeFilter.key}-${scopeFilter.origin}`, {\n value: scopeFilter.values ?? [scopeFilter.value],\n operator: scopeFilter.operator,\n });\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 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 /**\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 public restoreOriginalFilter(filter: AdHocFilterWithLabels) {\n const original: Partial<AdHocFilterWithLabels> = {\n matchAllFilter: false,\n restorable: false,\n };\n\n if (filter.restorable) {\n const originalFilter = this._originalValues.get(`${filter.key}-${filter.origin}`);\n\n if (!originalFilter) {\n return;\n }\n\n original.value = originalFilter?.value[0];\n original.values = originalFilter?.value;\n original.valueLabels = originalFilter?.value;\n original.operator = originalFilter?.operator;\n original.nonApplicable = originalFilter?.nonApplicable;\n const queryController = getQueryController(this);\n queryController?.startProfile(FILTER_RESTORED_INTERACTION);\n this._updateFilter(filter, original);\n }\n }\n\n public getValue(): VariableValue | undefined {\n return this.state.filterExpression;\n }\n\n public _updateFilter(filter: AdHocFilterWithLabels, update: Partial<AdHocFilterWithLabels>) {\n const { originFilters, filters, _wip } = this.state;\n\n if (filter.origin) {\n const originalValues = this._originalValues.get(`${filter.key}-${filter.origin}`);\n const updateValues = update.values || (update.value ? [update.value] : undefined);\n\n if (\n (updateValues && !isEqual(updateValues, originalValues?.value)) ||\n (update.operator && update.operator !== originalValues?.operator)\n ) {\n update.restorable = true;\n } else if (updateValues && isEqual(updateValues, originalValues?.value)) {\n update.restorable = false;\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({ filters: [...filters, { ..._wip, ...update }], _wip: undefined });\n this._debouncedVerifyApplicability();\n } else {\n this.setState({ _wip: { ...filter, ...update } });\n }\n return;\n }\n\n const updatedFilters = this.state.filters.map((f) => {\n return f === filter ? { ...f, ...update } : f;\n });\n\n this.setState({ filters: updatedFilters });\n }\n\n public 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 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 (this.state.filters.length) {\n // default forceEdit last filter (when triggering from wip filter)\n let filterToForceIndex = this.state.filters.length - 1;\n\n // adjust filterToForceIndex index to -1 if backspace triggered from non wip filter\n // to avoid triggering forceEdit logic\n if (filter !== this.state._wip) {\n filterToForceIndex = -1;\n }\n\n this.setState({\n filters: this.state.filters.reduce<AdHocFilterWithLabels[]>((acc, f, index) => {\n // adjust forceEdit of preceding filter if not readOnly\n if (index === filterToForceIndex && !f.readOnly) {\n return [\n ...acc,\n {\n ...f,\n forceEdit: true,\n },\n ];\n }\n // remove current filter\n if (f === filter) {\n return acc;\n }\n\n return [...acc, f];\n }, []),\n });\n } else if (this.state.originFilters?.length) {\n // default forceEdit last filter (when triggering from wip filter)\n let filterToForceIndex = this.state.originFilters.length - 1;\n\n // adjust filterToForceIndex index to -1 if backspace triggered from non wip filter\n // to avoid triggering forceEdit logic\n if (filter !== this.state._wip) {\n filterToForceIndex = -1;\n }\n\n this.setState({\n originFilters: this.state.originFilters.reduce<AdHocFilterWithLabels[]>((acc, f, index) => {\n // adjust forceEdit of preceding filter\n if (index === filterToForceIndex && !f.readOnly) {\n return [\n ...acc,\n {\n ...f,\n forceEdit: true,\n },\n ];\n }\n // remove current filter\n if (f === filter) {\n return acc;\n }\n\n return [...acc, f];\n }, []),\n });\n }\n }\n\n public async _verifyApplicability() {\n const filters = [...this.state.filters, ...(this.state.originFilters ?? [])];\n\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 if (!filters) {\n return;\n }\n\n const timeRange = sceneGraph.getTimeRange(this).state.value;\n const queries = this.state.useQueriesAsFilterForOptions ? getQueriesForVariables(this) : undefined;\n\n // @ts-expect-error (temporary till we update grafana/data)\n const response: DrilldownsApplicability[] = await ds.getDrilldownsApplicability({\n filters,\n queries,\n timeRange,\n scopes: sceneGraph.getScopes(this),\n ...getEnrichedFiltersRequest(this),\n });\n\n const responseMap = new Map<string, DrilldownsApplicability>();\n response.forEach((filter) => {\n responseMap.set(`${filter.key}${filter.origin ? `-${filter.origin}` : ''}`, filter);\n });\n\n const update = {\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 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 if (model.state.layout === 'combobox') {\n return <AdHocFiltersComboboxRenderer model={model} />;\n }\n\n return (\n <div className={styles.wrapper}>\n {filters\n .filter((filter) => !filter.hidden)\n .map((filter, index) => (\n <React.Fragment key={index}>\n <AdHocFilterRenderer filter={filter} model={model} />\n </React.Fragment>\n ))}\n\n {!readOnly && <AdHocFilterBuilder model={model} key=\"'builder\" addFilterButtonText={addFilterButtonText} />}\n </div>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n wrapper: css({\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'flex-end',\n columnGap: theme.spacing(2),\n rowGap: theme.spacing(1),\n }),\n});\n\nexport function toSelectableValue(input: MetricFindValue): SelectableValue<string> {\n const { text, value } = input;\n const result: SelectableValue<string> = {\n // converting text to string due to some edge cases where it can be a number\n // TODO: remove once https://github.com/grafana/grafana/issues/99021 is closed\n label: String(text),\n value: String(value ?? text),\n };\n\n if ('group' in input) {\n result.group = input.group;\n }\n\n if ('meta' in input) {\n result.meta = input.meta;\n }\n\n return result;\n}\n\nexport function isMatchAllFilter(filter: AdHocFilterWithLabels): boolean {\n return filter.operator === '=~' && filter.value === '.*';\n}\n\nexport function isFilterComplete(filter: AdHocFilterWithLabels): boolean {\n return filter.key !== '' && filter.operator !== '' && filter.value !== '';\n}\n\nexport function isFilterApplicable(filter: AdHocFilterWithLabels): boolean {\n return !filter.nonApplicable;\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":["_a","updatedFilters"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as _grafana_data from '@grafana/data';
|
|
2
|
-
import { BusEventWithPayload, EventBus, BusEvent, BusEventType, BusEventHandler, PanelMenuItem, FieldConfigSource, PanelPlugin, AbsoluteTimeRange, PanelData, InterpolateFunction, PanelModel, TimeRange, DataTransformContext, DataFrame, DataQueryRequest, DataSourceGetTagKeysOptions, DataSourceGetTagValuesOptions, IconName, PageLayoutType, UrlQueryMap, DataQuery as DataQuery$1, DataSourceApi, Registry, RegistryItem, ScopedVars, AdHocVariableFilter,
|
|
2
|
+
import { BusEventWithPayload, EventBus, BusEvent, BusEventType, BusEventHandler, PanelMenuItem, FieldConfigSource, PanelPlugin, AbsoluteTimeRange, PanelData, InterpolateFunction, PanelModel, TimeRange, DataTransformContext, DataFrame, DataQueryRequest, DataSourceGetTagKeysOptions, DataSourceGetTagValuesOptions, IconName, PageLayoutType, UrlQueryMap, DataQuery as DataQuery$1, DataSourceApi, Registry, RegistryItem, ScopedVars, AdHocVariableFilter, GetTagResponse, MetricFindValue, SelectableValue, VariableRefresh as VariableRefresh$1, VariableSort, DrilldownsApplicability, Scope, EventFilterOptions, AnnotationEvent, AnnotationQuery, DataTransformerConfig, TimeOption, FieldConfig, FieldType, FieldValueMatcherConfig, ScopedVar, RawTimeRange } from '@grafana/data';
|
|
3
3
|
import * as React$1 from 'react';
|
|
4
4
|
import React__default, { ComponentType, CSSProperties, PointerEvent, ForwardRefExoticComponent } from 'react';
|
|
5
5
|
import * as rxjs from 'rxjs';
|
|
@@ -2020,6 +2020,7 @@ declare class SceneDataTransformer extends SceneObjectBase<SceneDataTransformerS
|
|
|
2020
2020
|
private haveAlreadyTransformedData;
|
|
2021
2021
|
private transform;
|
|
2022
2022
|
private _interpolateVariablesInTransformationConfigs;
|
|
2023
|
+
private _filterAndPrepareTransformationsByTopic;
|
|
2023
2024
|
}
|
|
2024
2025
|
|
|
2025
2026
|
/**
|
|
@@ -2214,121 +2215,6 @@ declare class LocalValueVariable extends SceneObjectBase<LocalValueVariableState
|
|
|
2214
2215
|
isAncestorLoading(): boolean;
|
|
2215
2216
|
}
|
|
2216
2217
|
|
|
2217
|
-
/**
|
|
2218
|
-
* Controller state returned by useState hook
|
|
2219
|
-
*/
|
|
2220
|
-
interface AdHocFiltersControllerState {
|
|
2221
|
-
filters: AdHocFilterWithLabels[];
|
|
2222
|
-
originFilters?: AdHocFilterWithLabels[];
|
|
2223
|
-
readOnly?: boolean;
|
|
2224
|
-
allowCustomValue?: boolean;
|
|
2225
|
-
supportsMultiValueOperators?: boolean;
|
|
2226
|
-
onAddCustomValue?: OnAddCustomValueFn;
|
|
2227
|
-
wip?: AdHocFilterWithLabels;
|
|
2228
|
-
inputPlaceholder?: string;
|
|
2229
|
-
}
|
|
2230
|
-
/**
|
|
2231
|
-
* Controller interface for adhoc filters combobox UI.
|
|
2232
|
-
* Decouples the UI from AdHocFiltersVariable, allowing usage with or without a variable.
|
|
2233
|
-
*/
|
|
2234
|
-
interface AdHocFiltersController {
|
|
2235
|
-
/**
|
|
2236
|
-
* React hook to access controller state.
|
|
2237
|
-
* Components should call this to get current filters and configuration.
|
|
2238
|
-
*/
|
|
2239
|
-
useState(): AdHocFiltersControllerState;
|
|
2240
|
-
/**
|
|
2241
|
-
* Get possible keys given current filters.
|
|
2242
|
-
* @param currentKey - The key being edited (to exclude from filter context)
|
|
2243
|
-
*/
|
|
2244
|
-
getKeys(currentKey: string | null): Promise<Array<SelectableValue<string>>>;
|
|
2245
|
-
/**
|
|
2246
|
-
* Get possible values for a specific filter key.
|
|
2247
|
-
* @param filter - The filter to get values for
|
|
2248
|
-
*/
|
|
2249
|
-
getValuesFor(filter: AdHocFilterWithLabels): Promise<Array<SelectableValue<string>>>;
|
|
2250
|
-
/**
|
|
2251
|
-
* Get available operators based on configuration.
|
|
2252
|
-
*/
|
|
2253
|
-
getOperators(): Array<SelectableValue<string>>;
|
|
2254
|
-
/**
|
|
2255
|
-
* Update a filter with partial changes.
|
|
2256
|
-
* @param filter - The filter to update
|
|
2257
|
-
* @param update - Partial filter properties to update
|
|
2258
|
-
*/
|
|
2259
|
-
updateFilter(filter: AdHocFilterWithLabels, update: Partial<AdHocFilterWithLabels>): void;
|
|
2260
|
-
/**
|
|
2261
|
-
* Update a filter to match all values (=~ .*)
|
|
2262
|
-
* @param filter - The filter to update
|
|
2263
|
-
*/
|
|
2264
|
-
updateToMatchAll(filter: AdHocFilterWithLabels): void;
|
|
2265
|
-
/**
|
|
2266
|
-
* Remove a filter.
|
|
2267
|
-
* @param filter - The filter to remove
|
|
2268
|
-
*/
|
|
2269
|
-
removeFilter(filter: AdHocFilterWithLabels): void;
|
|
2270
|
-
/**
|
|
2271
|
-
* Remove the last filter in the list.
|
|
2272
|
-
*/
|
|
2273
|
-
removeLastFilter(): void;
|
|
2274
|
-
/**
|
|
2275
|
-
* Handle backspace key in combobox (removes filter or navigates to previous).
|
|
2276
|
-
* @param filter - The filter where backspace was pressed
|
|
2277
|
-
*/
|
|
2278
|
-
handleComboboxBackspace(filter: AdHocFilterWithLabels): void;
|
|
2279
|
-
/**
|
|
2280
|
-
* Add a new work-in-progress filter.
|
|
2281
|
-
*/
|
|
2282
|
-
addWip(): void;
|
|
2283
|
-
/**
|
|
2284
|
-
* Restore an origin filter to its original value.
|
|
2285
|
-
* @param filter - The filter to restore
|
|
2286
|
-
*/
|
|
2287
|
-
restoreOriginalFilter(filter: AdHocFilterWithLabels): void;
|
|
2288
|
-
/**
|
|
2289
|
-
* Optional: Start profiling an interaction (for performance tracking).
|
|
2290
|
-
* @param name - The interaction name
|
|
2291
|
-
*/
|
|
2292
|
-
startProfile?(name: string): void;
|
|
2293
|
-
/**
|
|
2294
|
-
* Optional: Start tracking an interaction (for analytics).
|
|
2295
|
-
* @param name - The interaction name
|
|
2296
|
-
*/
|
|
2297
|
-
startInteraction?(name: string): void;
|
|
2298
|
-
/**
|
|
2299
|
-
* Optional: Stop tracking the current interaction.
|
|
2300
|
-
*/
|
|
2301
|
-
stopInteraction?(): void;
|
|
2302
|
-
}
|
|
2303
|
-
|
|
2304
|
-
/**
|
|
2305
|
-
* Adapter that wraps AdHocFiltersVariable to implement the AdHocFiltersController interface.
|
|
2306
|
-
* This allows the combobox UI to work with the variable while keeping the UI decoupled.
|
|
2307
|
-
*/
|
|
2308
|
-
declare class VariableBackedAdHocFiltersController implements AdHocFiltersController {
|
|
2309
|
-
private model;
|
|
2310
|
-
constructor(model: AdHocFiltersVariable);
|
|
2311
|
-
useState(): AdHocFiltersControllerState;
|
|
2312
|
-
getKeys(currentKey: string | null): Promise<Array<SelectableValue<string>>>;
|
|
2313
|
-
getValuesFor(filter: AdHocFilterWithLabels): Promise<Array<SelectableValue<string>>>;
|
|
2314
|
-
getOperators(): Array<SelectableValue<string>>;
|
|
2315
|
-
updateFilter(filter: AdHocFilterWithLabels, update: Partial<AdHocFilterWithLabels>): void;
|
|
2316
|
-
updateToMatchAll(filter: AdHocFilterWithLabels): void;
|
|
2317
|
-
removeFilter(filter: AdHocFilterWithLabels): void;
|
|
2318
|
-
removeLastFilter(): void;
|
|
2319
|
-
handleComboboxBackspace(filter: AdHocFilterWithLabels): void;
|
|
2320
|
-
addWip(): void;
|
|
2321
|
-
restoreOriginalFilter(filter: AdHocFilterWithLabels): void;
|
|
2322
|
-
startProfile(name: string): void;
|
|
2323
|
-
startInteraction(name: string): void;
|
|
2324
|
-
stopInteraction(): void;
|
|
2325
|
-
}
|
|
2326
|
-
|
|
2327
|
-
interface Props$2 {
|
|
2328
|
-
controller: AdHocFiltersController;
|
|
2329
|
-
}
|
|
2330
|
-
declare const AdHocFiltersComboboxRenderer: React__default.NamedExoticComponent<Props$2>;
|
|
2331
|
-
|
|
2332
2218
|
declare function useUrlSync(sceneRoot: SceneObject, options?: SceneUrlSyncOptions): boolean;
|
|
2333
2219
|
|
|
2334
2220
|
interface UrlSyncContextProviderProps extends SceneUrlSyncOptions {
|
|
@@ -2472,11 +2358,12 @@ interface SceneTimeRangeCompareState extends SceneObjectState {
|
|
|
2472
2358
|
value: string;
|
|
2473
2359
|
}>;
|
|
2474
2360
|
hideCheckbox?: boolean;
|
|
2361
|
+
key?: string;
|
|
2475
2362
|
}
|
|
2476
2363
|
declare class SceneTimeRangeCompare extends SceneObjectBase<SceneTimeRangeCompareState> implements ExtraQueryProvider<SceneTimeRangeCompareState> {
|
|
2477
2364
|
static Component: typeof SceneTimeRangeCompareRenderer;
|
|
2478
2365
|
protected _urlSync: SceneObjectUrlSyncConfig;
|
|
2479
|
-
constructor(state
|
|
2366
|
+
constructor(state?: Partial<SceneTimeRangeCompareState>);
|
|
2480
2367
|
private _onActivate;
|
|
2481
2368
|
getCompareOptions: (timeRange: TimeRange) => {
|
|
2482
2369
|
label: string;
|
|
@@ -3319,8 +3206,6 @@ declare const loadResources: ResourceLoader;
|
|
|
3319
3206
|
|
|
3320
3207
|
|
|
3321
3208
|
|
|
3322
|
-
|
|
3323
|
-
|
|
3324
3209
|
|
|
3325
3210
|
|
|
3326
3211
|
|
|
@@ -3349,5 +3234,5 @@ declare const sceneUtils: {
|
|
|
3349
3234
|
buildPathIdFor: typeof buildPathIdFor;
|
|
3350
3235
|
};
|
|
3351
3236
|
|
|
3352
|
-
export {
|
|
3353
|
-
export type { AdHocFilterWithLabels,
|
|
3237
|
+
export { AdHocFiltersVariable, ConstantVariable, ControlsLabel, CustomVariable, DataProviderProxy, DataSourceVariable, EmbeddedScene, FieldConfigBuilder, FieldConfigBuilders, FieldConfigOverridesBuilder, GroupByVariable, IntervalVariable, LazyLoader, LocalValueVariable, MultiOrSingleValueSelect, MultiValueVariable, NestedScene, NewSceneObjectAddedEvent, PATH_ID_SEPARATOR, PanelBuilders, PanelOptionsBuilders, QueryVariable, RuntimeDataSource, SafeSerializableSceneObject, SceneApp, SceneAppPage, SceneByFrameRepeater, SceneByVariableRepeater, SceneCSSGridItem, SceneCSSGridLayout, SceneCanvasText, SceneControlsSpacer, SceneDataLayerBase, SceneDataLayerControls, SceneDataLayerSet, SceneDataLayerSetBase, SceneDataNode, SceneDataTransformer, SceneDebugger, SceneFlexItem, SceneFlexLayout, SceneGridItem, SceneGridLayout, SceneGridLayoutDragStartEvent, SceneGridRow, SceneObjectBase, SceneObjectRef, SceneObjectStateChangedEvent, SceneObjectUrlSyncConfig, SceneQueryRunner, SceneReactObject, SceneRefreshPicker, SceneRenderProfiler, SceneTimePicker, SceneTimeRange, SceneTimeRangeCompare, SceneTimeRangeTransformerBase, SceneTimeZoneOverride, SceneToolbarButton, SceneToolbarInput, SceneVariableSet, SceneVariableValueChangedEvent, ScopesVariable, SplitLayout, SwitchVariable, TestVariable, TextBoxVariable, UrlSyncContextProvider, UrlSyncManager, UserActionEvent, VariableDependencyConfig, VariableValueControl, VariableValueSelectWrapper, VariableValueSelectors, VizConfigBuilder, VizConfigBuilders, VizPanel, VizPanelBuilder, VizPanelExploreButton, VizPanelMenu, index$1 as behaviors, index as dataLayers, escapeUrlPipeDelimiters, formatRegistry, getExploreURL, isCustomVariableValue, isDataLayer, isDataRequestEnricher, isFiltersRequestEnricher, isSceneObject, loadResources, registerQueryWithController, registerRuntimeDataSource, sceneGraph, sceneUtils, useSceneApp, useSceneObjectState, useUrlSync };
|
|
3238
|
+
export type { AdHocFilterWithLabels, CancelActivationHandler, ControlsLayout, CustomFormatterVariable, CustomTransformOperator, CustomTransformerDefinition, CustomVariableValue, DataLayerFilter, DataRequestEnricher, DeepPartial, EmbeddedSceneState, ExtraQueryDataProcessor, ExtraQueryDescriptor, ExtraQueryProvider, FiltersRequestEnricher, FormatVariable, InterpolationFormatParameter, MacroVariableConstructor, MultiValueVariableState, QueryRunnerState, SceneActivationHandler, SceneAppDrilldownView, SceneAppPageLike, SceneAppPageState, SceneAppRoute, SceneComponent, SceneComponentProps, SceneDataLayerProvider, SceneDataLayerProviderState, SceneDataProvider, SceneDataProviderResult, SceneDataQuery, SceneDataState, SceneDataTransformerState, SceneDeactivationHandler, SceneFlexItemLike, SceneFlexItemState, SceneGridItemLike, SceneGridItemStateLike, SceneInteractionProfileEvent, SceneLayout, SceneLayoutChildOptions, SceneLayoutState, SceneObject, SceneObjectState, SceneObjectStateChangedPayload, SceneObjectUrlSyncHandler, SceneObjectUrlValue, SceneObjectUrlValues, SceneObjectWithUrlSync, SceneQueryControllerEntry, SceneQueryControllerEntryType, SceneQueryControllerLike, SceneRefreshPickerState, SceneRouteMatch, SceneStateChangedHandler, SceneStatelessBehavior, SceneTimeRangeLike, SceneTimeRangeState, SceneUrlSyncOptions, SceneVariable, SceneVariableDependencyConfigLike, SceneVariableSetState, SceneVariableState, SceneVariables, UrlSyncManagerLike, UseStateHookOptions, ValidateAndUpdateResult, VariableCustomFormatterFn, VariableGetOptionsArgs, VariableValue, VariableValueOption, VariableValueSingle, VizConfig, VizPanelState };
|