@grafana/scenes 6.39.5--canary.1266.18407595746.0 → 6.39.6
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 +24 -0
- 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/index.js +23 -7
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
@@ -1,3 +1,27 @@
|
|
1
|
+
# v6.39.6 (Wed Oct 15 2025)
|
2
|
+
|
3
|
+
#### 🐛 Bug Fix
|
4
|
+
|
5
|
+
- Fix rounding on old-style adhoc filters [#1271](https://github.com/grafana/scenes/pull/1271) ([@ashharrison90](https://github.com/ashharrison90))
|
6
|
+
|
7
|
+
#### Authors: 1
|
8
|
+
|
9
|
+
- Ashley Harrison ([@ashharrison90](https://github.com/ashharrison90))
|
10
|
+
|
11
|
+
---
|
12
|
+
|
13
|
+
# v6.39.5 (Fri Oct 10 2025)
|
14
|
+
|
15
|
+
#### 🐛 Bug Fix
|
16
|
+
|
17
|
+
- Annotations: Pass annotations through when transformations exist but none are annotations transformations [#1266](https://github.com/grafana/scenes/pull/1266) ([@fastfrwrd](https://github.com/fastfrwrd))
|
18
|
+
|
19
|
+
#### Authors: 1
|
20
|
+
|
21
|
+
- Paul Marbach ([@fastfrwrd](https://github.com/fastfrwrd))
|
22
|
+
|
23
|
+
---
|
24
|
+
|
1
25
|
# v6.39.4 (Fri Oct 10 2025)
|
2
26
|
|
3
27
|
#### 🐛 Bug Fix
|
@@ -1,10 +1,12 @@
|
|
1
1
|
import { t } from '@grafana/i18n';
|
2
2
|
import React from 'react';
|
3
3
|
import { AdHocFilterRenderer } from './AdHocFilterRenderer.js';
|
4
|
-
import { Button } from '@grafana/ui';
|
4
|
+
import { useStyles2, Button } from '@grafana/ui';
|
5
|
+
import { css } from '@emotion/css';
|
5
6
|
|
6
7
|
function AdHocFilterBuilder({ model, addFilterButtonText }) {
|
7
8
|
const { _wip } = model.useState();
|
9
|
+
const styles = useStyles2(getStyles);
|
8
10
|
if (!_wip) {
|
9
11
|
return /* @__PURE__ */ React.createElement(
|
10
12
|
Button,
|
@@ -14,13 +16,22 @@ function AdHocFilterBuilder({ model, addFilterButtonText }) {
|
|
14
16
|
title: t("grafana-scenes.variables.ad-hoc-filter-builder.title-add-filter", "Add filter"),
|
15
17
|
"aria-label": t("grafana-scenes.variables.ad-hoc-filter-builder.aria-label-add-filter", "Add filter"),
|
16
18
|
"data-testid": `AdHocFilter-add`,
|
17
|
-
onClick: () => model._addWip()
|
19
|
+
onClick: () => model._addWip(),
|
20
|
+
className: styles.addButton
|
18
21
|
},
|
19
22
|
addFilterButtonText
|
20
23
|
);
|
21
24
|
}
|
22
25
|
return /* @__PURE__ */ React.createElement(AdHocFilterRenderer, { filter: _wip, model });
|
23
26
|
}
|
27
|
+
const getStyles = (theme) => ({
|
28
|
+
addButton: css({
|
29
|
+
"&:first-child": {
|
30
|
+
borderBottomLeftRadius: 0,
|
31
|
+
borderTopLeftRadius: 0
|
32
|
+
}
|
33
|
+
})
|
34
|
+
});
|
24
35
|
|
25
36
|
export { AdHocFilterBuilder };
|
26
37
|
//# sourceMappingURL=AdHocFilterBuilder.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"AdHocFilterBuilder.js","sources":["../../../../src/variables/adhoc/AdHocFilterBuilder.tsx"],"sourcesContent":["import { t } from '@grafana/i18n';\nimport React from 'react';\n\nimport { AdHocFilterRenderer } from './AdHocFilterRenderer';\nimport { AdHocFiltersVariable } from './AdHocFiltersVariable';\nimport { Button } from '@grafana/ui';\n\ninterface Props {\n model: AdHocFiltersVariable;\n addFilterButtonText?: string;\n}\n\nexport function AdHocFilterBuilder({ model, addFilterButtonText }: Props) {\n const { _wip } = model.useState();\n\n if (!_wip) {\n return (\n <Button\n variant=\"secondary\"\n icon=\"plus\"\n title={t('grafana-scenes.variables.ad-hoc-filter-builder.title-add-filter', 'Add filter')}\n aria-label={t('grafana-scenes.variables.ad-hoc-filter-builder.aria-label-add-filter', 'Add filter')}\n data-testid={`AdHocFilter-add`}\n onClick={() => model._addWip()}\n >\n {addFilterButtonText}\n </Button>\n );\n }\n\n return <AdHocFilterRenderer filter={_wip} model={model} />;\n}\n"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"AdHocFilterBuilder.js","sources":["../../../../src/variables/adhoc/AdHocFilterBuilder.tsx"],"sourcesContent":["import { t } from '@grafana/i18n';\nimport React from 'react';\n\nimport { AdHocFilterRenderer } from './AdHocFilterRenderer';\nimport { AdHocFiltersVariable } from './AdHocFiltersVariable';\nimport { Button, useStyles2 } from '@grafana/ui';\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { css } from '@emotion/css';\n\ninterface Props {\n model: AdHocFiltersVariable;\n addFilterButtonText?: string;\n}\n\nexport function AdHocFilterBuilder({ model, addFilterButtonText }: Props) {\n const { _wip } = model.useState();\n const styles = useStyles2(getStyles);\n\n if (!_wip) {\n return (\n <Button\n variant=\"secondary\"\n icon=\"plus\"\n title={t('grafana-scenes.variables.ad-hoc-filter-builder.title-add-filter', 'Add filter')}\n aria-label={t('grafana-scenes.variables.ad-hoc-filter-builder.aria-label-add-filter', 'Add filter')}\n data-testid={`AdHocFilter-add`}\n onClick={() => model._addWip()}\n className={styles.addButton}\n >\n {addFilterButtonText}\n </Button>\n );\n }\n\n return <AdHocFilterRenderer filter={_wip} model={model} />;\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n addButton: css({\n '&:first-child': {\n borderBottomLeftRadius: 0,\n borderTopLeftRadius: 0,\n },\n }),\n});\n"],"names":[],"mappings":";;;;;;AAcO,SAAS,kBAAmB,CAAA,EAAE,KAAO,EAAA,mBAAA,EAA8B,EAAA;AACxE,EAAA,MAAM,EAAE,IAAA,EAAS,GAAA,KAAA,CAAM,QAAS,EAAA;AAChC,EAAM,MAAA,MAAA,GAAS,WAAW,SAAS,CAAA;AAEnC,EAAA,IAAI,CAAC,IAAM,EAAA;AACT,IACE,uBAAA,KAAA,CAAA,aAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,OAAQ,EAAA,WAAA;AAAA,QACR,IAAK,EAAA,MAAA;AAAA,QACL,KAAA,EAAO,CAAE,CAAA,iEAAA,EAAmE,YAAY,CAAA;AAAA,QACxF,YAAA,EAAY,CAAE,CAAA,sEAAA,EAAwE,YAAY,CAAA;AAAA,QAClG,aAAa,EAAA,CAAA,eAAA,CAAA;AAAA,QACb,OAAA,EAAS,MAAM,KAAA,CAAM,OAAQ,EAAA;AAAA,QAC7B,WAAW,MAAO,CAAA;AAAA,OAAA;AAAA,MAEjB;AAAA,KACH;AAAA;AAIJ,EAAA,uBAAQ,KAAA,CAAA,aAAA,CAAA,mBAAA,EAAA,EAAoB,MAAQ,EAAA,IAAA,EAAM,KAAc,EAAA,CAAA;AAC1D;AAEA,MAAM,SAAA,GAAY,CAAC,KAA0B,MAAA;AAAA,EAC3C,WAAW,GAAI,CAAA;AAAA,IACb,eAAiB,EAAA;AAAA,MACf,sBAAwB,EAAA,CAAA;AAAA,MACxB,mBAAqB,EAAA;AAAA;AACvB,GACD;AACH,CAAA,CAAA;;;;"}
|
@@ -250,6 +250,12 @@ const getStyles = (theme) => ({
|
|
250
250
|
}),
|
251
251
|
wrapper: css({
|
252
252
|
display: "flex",
|
253
|
+
"&:first-child": {
|
254
|
+
"> :first-child": {
|
255
|
+
borderBottomLeftRadius: 0,
|
256
|
+
borderTopLeftRadius: 0
|
257
|
+
}
|
258
|
+
},
|
253
259
|
"> *": {
|
254
260
|
"&:not(:first-child)": {
|
255
261
|
// Negative margin hides the double-border on adjacent selects
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"AdHocFilterRenderer.js","sources":["../../../../src/variables/adhoc/AdHocFilterRenderer.tsx"],"sourcesContent":["import { t } from '@grafana/i18n';\nimport React, { useMemo, useState } from 'react';\n\nimport { AdHocFiltersVariable, AdHocFilterWithLabels, isMultiValueOperator, OPERATORS } from './AdHocFiltersVariable';\nimport { GrafanaTheme2, SelectableValue } from '@grafana/data';\nimport { Button, Field, InputActionMeta, Select, useStyles2 } from '@grafana/ui';\nimport { css, cx } from '@emotion/css';\nimport { ControlsLabel } from '../../utils/ControlsLabel';\nimport { getAdhocOptionSearcher } from './getAdhocOptionSearcher';\nimport { handleOptionGroups } from '../utils';\nimport { OptionWithCheckbox } from '../components/VariableValueSelect';\n\ninterface Props {\n filter: AdHocFilterWithLabels;\n model: AdHocFiltersVariable;\n}\n\nfunction keyLabelToOption(key: string, label?: string): SelectableValue | null {\n return key !== ''\n ? {\n value: key,\n label: label || key,\n }\n : null;\n}\n\nconst filterNoOp = () => true;\n\nexport function AdHocFilterRenderer({ filter, model }: Props) {\n const styles = useStyles2(getStyles);\n\n const [keys, setKeys] = useState<SelectableValue[]>([]);\n const [values, setValues] = useState<SelectableValue[]>([]);\n const [isKeysLoading, setIsKeysLoading] = useState(false);\n const [isValuesLoading, setIsValuesLoading] = useState(false);\n const [isKeysOpen, setIsKeysOpen] = useState(false);\n const [isValuesOpen, setIsValuesOpen] = useState(false);\n const [isOperatorOpen, setIsOperatorOpen] = useState(false);\n const [valueInputValue, setValueInputValue] = useState('');\n const [valueHasCustomValue, setValueHasCustomValue] = useState(false);\n // To not trigger queries on every selection we store this state locally here and only update the variable onBlur\n const [uncommittedValue, setUncommittedValue] = useState<SelectableValue>(\n filter.values ? filter.values.map((value, index) => keyLabelToOption(value, filter.valueLabels?.[index])) : []\n );\n const isMultiValue = isMultiValueOperator(filter.operator);\n\n const keyValue = keyLabelToOption(filter.key, filter.keyLabel);\n const valueValue = keyLabelToOption(filter.value, filter.valueLabels?.[0]);\n\n const optionSearcher = useMemo(() => getAdhocOptionSearcher(values), [values]);\n const onAddCustomValue = model.state.onAddCustomValue;\n\n const onValueInputChange = (value: string, { action }: InputActionMeta) => {\n if (action === 'input-change') {\n setValueInputValue(value);\n }\n return value;\n };\n\n const onOperatorChange = (v: SelectableValue) => {\n const existingOperator = filter.operator;\n const newOperator = v.value;\n\n const update: Partial<AdHocFilterWithLabels> = { operator: newOperator };\n // clear value if operator has changed from multi to single\n if (isMultiValueOperator(existingOperator) && !isMultiValueOperator(newOperator)) {\n update.value = '';\n update.valueLabels = [''];\n update.values = undefined;\n setUncommittedValue([]);\n // set values if operator has changed from single to multi\n } else if (!isMultiValueOperator(existingOperator) && isMultiValueOperator(newOperator) && filter.value) {\n update.values = [filter.value];\n setUncommittedValue([\n {\n value: filter.value,\n label: filter.valueLabels?.[0] ?? filter.value,\n },\n ]);\n }\n model._updateFilter(filter, update);\n };\n\n const filteredValueOptions = useMemo(\n () => handleOptionGroups(optionSearcher(valueInputValue)),\n [optionSearcher, valueInputValue]\n );\n\n const multiValueProps = {\n isMulti: true,\n value: uncommittedValue,\n components: {\n Option: OptionWithCheckbox,\n },\n hideSelectedOptions: false,\n closeMenuOnSelect: false,\n openMenuOnFocus: false,\n onChange: (v: SelectableValue) => {\n setUncommittedValue(v);\n // clear input value when creating a new custom multi value\n if (v.some((value: SelectableValue) => value.__isNew__)) {\n setValueInputValue('');\n }\n },\n onBlur: () => {\n model._updateFilter(filter, {\n value: uncommittedValue[0]?.value ?? '',\n // TODO remove expect-error when we're on the latest version of @grafana/data\n values: uncommittedValue.map((option: SelectableValue<string>) => option.value),\n valueLabels: uncommittedValue.map((option: SelectableValue<string>) => option.label),\n });\n },\n };\n\n const operatorDefinition = OPERATORS.find((op) => filter.operator === op.value);\n\n const valueSelect = (\n <Select\n virtualized\n allowCustomValue={model.state.allowCustomValue ?? true}\n createOptionPosition={operatorDefinition?.isRegex ? 'first' : 'last'}\n isValidNewOption={(inputValue) => inputValue.trim().length > 0}\n allowCreateWhileLoading\n formatCreateLabel={(inputValue) => `Use custom value: ${inputValue}`}\n disabled={model.state.readOnly}\n className={cx(styles.value, isValuesOpen ? styles.widthWhenOpen : undefined)}\n width=\"auto\"\n value={valueValue}\n filterOption={filterNoOp}\n placeholder={t(\n 'grafana-scenes.variables.ad-hoc-filter-renderer.value-select.placeholder-select-value',\n 'Select value'\n )}\n options={filteredValueOptions}\n inputValue={valueInputValue}\n onInputChange={onValueInputChange}\n onChange={(v) => {\n if (onAddCustomValue && v.__isNew__) {\n model._updateFilter(filter, onAddCustomValue(v, filter));\n } else {\n model._updateFilter(filter, {\n value: v.value,\n valueLabels: v.label ? [v.label] : [v.value],\n });\n }\n\n if (valueHasCustomValue !== v.__isNew__) {\n setValueHasCustomValue(v.__isNew__);\n }\n }}\n // there's a bug in react-select where the menu doesn't recalculate its position when the options are loaded asynchronously\n // see https://github.com/grafana/grafana/issues/63558\n // instead, we explicitly control the menu visibility and prevent showing it until the options have fully loaded\n isOpen={isValuesOpen && !isValuesLoading}\n isLoading={isValuesLoading}\n openMenuOnFocus={true}\n onOpenMenu={async () => {\n setIsValuesLoading(true);\n setIsValuesOpen(true);\n const values = await model._getValuesFor(filter);\n setIsValuesLoading(false);\n setValues(values);\n if (valueHasCustomValue) {\n setValueInputValue(valueValue?.label ?? '');\n }\n }}\n onCloseMenu={() => {\n setIsValuesOpen(false);\n setValueInputValue('');\n }}\n {...(isMultiValue && multiValueProps)}\n />\n );\n\n const keySelect = (\n <Select\n // By changing the key, we reset the Select component,\n // to ensure that the loaded values are shown after they are loaded\n key={`${isValuesLoading ? 'loading' : 'loaded'}`}\n disabled={model.state.readOnly}\n className={cx(styles.key, isKeysOpen ? styles.widthWhenOpen : undefined)}\n width=\"auto\"\n allowCustomValue={model.state.allowCustomValue ?? true}\n createOptionPosition={operatorDefinition?.isRegex ? 'first' : 'last'}\n value={keyValue}\n placeholder={t(\n 'grafana-scenes.variables.ad-hoc-filter-renderer.key-select.placeholder-select-label',\n 'Select label'\n )}\n options={handleOptionGroups(keys)}\n onChange={(v) => {\n model._updateFilter(filter, {\n key: v.value,\n keyLabel: v.label,\n // clear value if key has changed\n value: '',\n valueLabels: [''],\n values: undefined,\n });\n setUncommittedValue([]);\n }}\n autoFocus={filter.key === ''}\n // there's a bug in react-select where the menu doesn't recalculate its position when the options are loaded asynchronously\n // see https://github.com/grafana/grafana/issues/63558\n // instead, we explicitly control the menu visibility and prevent showing it until the options have fully loaded\n isOpen={isKeysOpen && !isKeysLoading}\n isLoading={isKeysLoading}\n onOpenMenu={async () => {\n setIsKeysOpen(true);\n setIsKeysLoading(true);\n const keys = await model._getKeys(filter.key);\n setIsKeysLoading(false);\n setKeys(keys);\n }}\n onCloseMenu={() => {\n setIsKeysOpen(false);\n }}\n onBlur={() => {\n if (filter.key === '') {\n model._removeFilter(filter);\n }\n }}\n openMenuOnFocus={true}\n />\n );\n\n const operatorSelect = (\n <Select\n className={cx(styles.operator, {\n [styles.widthWhenOpen]: isOperatorOpen,\n })}\n value={filter.operator}\n disabled={model.state.readOnly}\n options={model._getOperators()}\n onChange={onOperatorChange}\n onOpenMenu={() => {\n setIsOperatorOpen(true);\n }}\n onCloseMenu={() => {\n setIsOperatorOpen(false);\n }}\n />\n );\n\n if (model.state.layout === 'vertical') {\n if (filter.key) {\n const label = (\n <ControlsLabel layout=\"vertical\" label={filter.key ?? ''} onRemove={() => model._removeFilter(filter)} />\n );\n\n return (\n <Field label={label} data-testid={`AdHocFilter-${filter.key}`} className={styles.field}>\n <div className={styles.wrapper}>\n {operatorSelect}\n {valueSelect}\n </div>\n </Field>\n );\n } else {\n return (\n <Field\n label={t('grafana-scenes.variables.ad-hoc-filter-renderer.label-select-label', 'Select label')}\n data-testid={`AdHocFilter-${filter.key}`}\n className={styles.field}\n >\n {keySelect}\n </Field>\n );\n }\n }\n\n return (\n <div className={styles.wrapper} data-testid={`AdHocFilter-${filter.key}`}>\n {keySelect}\n {operatorSelect}\n {valueSelect}\n <Button\n variant=\"secondary\"\n aria-label={t('grafana-scenes.variables.ad-hoc-filter-renderer.aria-label-remove-filter', 'Remove filter')}\n title={t('grafana-scenes.variables.ad-hoc-filter-renderer.title-remove-filter', 'Remove filter')}\n className={styles.removeButton}\n icon=\"times\"\n data-testid={`AdHocFilter-remove-${filter.key ?? ''}`}\n onClick={() => model._removeFilter(filter)}\n />\n </div>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n field: css({\n marginBottom: 0,\n }),\n wrapper: css({\n display: 'flex',\n '> *': {\n '&:not(:first-child)': {\n // Negative margin hides the double-border on adjacent selects\n marginLeft: -1,\n },\n\n '&:first-child': {\n borderTopRightRadius: 0,\n borderBottomRightRadius: 0,\n },\n\n '&:last-child': {\n borderTopLeftRadius: 0,\n borderBottomLeftRadius: 0,\n },\n\n '&:not(:first-child):not(:last-child)': {\n borderRadius: 0,\n },\n\n // Fix focus state zIndex issues\n position: 'relative',\n zIndex: 0,\n\n // Adjacent borders are overlapping, so raise children up when hovering etc\n // so all that child's borders are visible.\n '&:hover': {\n zIndex: 1,\n },\n\n '&:focus-within': {\n zIndex: 2,\n },\n },\n }),\n widthWhenOpen: css({\n minWidth: theme.spacing(16),\n }),\n value: css({\n flexBasis: 'content',\n flexShrink: 1,\n minWidth: '90px',\n }),\n key: css({\n flexBasis: 'content',\n minWidth: '90px',\n flexShrink: 1,\n }),\n operator: css({\n flexShrink: 0,\n flexBasis: 'content',\n }),\n removeButton: css({\n paddingLeft: theme.spacing(3 / 2),\n paddingRight: theme.spacing(3 / 2),\n borderLeft: 'none',\n width: theme.spacing(3),\n marginRight: theme.spacing(1),\n boxSizing: 'border-box',\n // To not have button background and last select border intersect\n position: 'relative',\n left: '1px',\n }),\n});\n"],"names":["_a","_b","values","keys"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"AdHocFilterRenderer.js","sources":["../../../../src/variables/adhoc/AdHocFilterRenderer.tsx"],"sourcesContent":["import { t } from '@grafana/i18n';\nimport React, { useMemo, useState } from 'react';\n\nimport { AdHocFiltersVariable, AdHocFilterWithLabels, isMultiValueOperator, OPERATORS } from './AdHocFiltersVariable';\nimport { GrafanaTheme2, SelectableValue } from '@grafana/data';\nimport { Button, Field, InputActionMeta, Select, useStyles2 } from '@grafana/ui';\nimport { css, cx } from '@emotion/css';\nimport { ControlsLabel } from '../../utils/ControlsLabel';\nimport { getAdhocOptionSearcher } from './getAdhocOptionSearcher';\nimport { handleOptionGroups } from '../utils';\nimport { OptionWithCheckbox } from '../components/VariableValueSelect';\n\ninterface Props {\n filter: AdHocFilterWithLabels;\n model: AdHocFiltersVariable;\n}\n\nfunction keyLabelToOption(key: string, label?: string): SelectableValue | null {\n return key !== ''\n ? {\n value: key,\n label: label || key,\n }\n : null;\n}\n\nconst filterNoOp = () => true;\n\nexport function AdHocFilterRenderer({ filter, model }: Props) {\n const styles = useStyles2(getStyles);\n\n const [keys, setKeys] = useState<SelectableValue[]>([]);\n const [values, setValues] = useState<SelectableValue[]>([]);\n const [isKeysLoading, setIsKeysLoading] = useState(false);\n const [isValuesLoading, setIsValuesLoading] = useState(false);\n const [isKeysOpen, setIsKeysOpen] = useState(false);\n const [isValuesOpen, setIsValuesOpen] = useState(false);\n const [isOperatorOpen, setIsOperatorOpen] = useState(false);\n const [valueInputValue, setValueInputValue] = useState('');\n const [valueHasCustomValue, setValueHasCustomValue] = useState(false);\n // To not trigger queries on every selection we store this state locally here and only update the variable onBlur\n const [uncommittedValue, setUncommittedValue] = useState<SelectableValue>(\n filter.values ? filter.values.map((value, index) => keyLabelToOption(value, filter.valueLabels?.[index])) : []\n );\n const isMultiValue = isMultiValueOperator(filter.operator);\n\n const keyValue = keyLabelToOption(filter.key, filter.keyLabel);\n const valueValue = keyLabelToOption(filter.value, filter.valueLabels?.[0]);\n\n const optionSearcher = useMemo(() => getAdhocOptionSearcher(values), [values]);\n const onAddCustomValue = model.state.onAddCustomValue;\n\n const onValueInputChange = (value: string, { action }: InputActionMeta) => {\n if (action === 'input-change') {\n setValueInputValue(value);\n }\n return value;\n };\n\n const onOperatorChange = (v: SelectableValue) => {\n const existingOperator = filter.operator;\n const newOperator = v.value;\n\n const update: Partial<AdHocFilterWithLabels> = { operator: newOperator };\n // clear value if operator has changed from multi to single\n if (isMultiValueOperator(existingOperator) && !isMultiValueOperator(newOperator)) {\n update.value = '';\n update.valueLabels = [''];\n update.values = undefined;\n setUncommittedValue([]);\n // set values if operator has changed from single to multi\n } else if (!isMultiValueOperator(existingOperator) && isMultiValueOperator(newOperator) && filter.value) {\n update.values = [filter.value];\n setUncommittedValue([\n {\n value: filter.value,\n label: filter.valueLabels?.[0] ?? filter.value,\n },\n ]);\n }\n model._updateFilter(filter, update);\n };\n\n const filteredValueOptions = useMemo(\n () => handleOptionGroups(optionSearcher(valueInputValue)),\n [optionSearcher, valueInputValue]\n );\n\n const multiValueProps = {\n isMulti: true,\n value: uncommittedValue,\n components: {\n Option: OptionWithCheckbox,\n },\n hideSelectedOptions: false,\n closeMenuOnSelect: false,\n openMenuOnFocus: false,\n onChange: (v: SelectableValue) => {\n setUncommittedValue(v);\n // clear input value when creating a new custom multi value\n if (v.some((value: SelectableValue) => value.__isNew__)) {\n setValueInputValue('');\n }\n },\n onBlur: () => {\n model._updateFilter(filter, {\n value: uncommittedValue[0]?.value ?? '',\n // TODO remove expect-error when we're on the latest version of @grafana/data\n values: uncommittedValue.map((option: SelectableValue<string>) => option.value),\n valueLabels: uncommittedValue.map((option: SelectableValue<string>) => option.label),\n });\n },\n };\n\n const operatorDefinition = OPERATORS.find((op) => filter.operator === op.value);\n\n const valueSelect = (\n <Select\n virtualized\n allowCustomValue={model.state.allowCustomValue ?? true}\n createOptionPosition={operatorDefinition?.isRegex ? 'first' : 'last'}\n isValidNewOption={(inputValue) => inputValue.trim().length > 0}\n allowCreateWhileLoading\n formatCreateLabel={(inputValue) => `Use custom value: ${inputValue}`}\n disabled={model.state.readOnly}\n className={cx(styles.value, isValuesOpen ? styles.widthWhenOpen : undefined)}\n width=\"auto\"\n value={valueValue}\n filterOption={filterNoOp}\n placeholder={t(\n 'grafana-scenes.variables.ad-hoc-filter-renderer.value-select.placeholder-select-value',\n 'Select value'\n )}\n options={filteredValueOptions}\n inputValue={valueInputValue}\n onInputChange={onValueInputChange}\n onChange={(v) => {\n if (onAddCustomValue && v.__isNew__) {\n model._updateFilter(filter, onAddCustomValue(v, filter));\n } else {\n model._updateFilter(filter, {\n value: v.value,\n valueLabels: v.label ? [v.label] : [v.value],\n });\n }\n\n if (valueHasCustomValue !== v.__isNew__) {\n setValueHasCustomValue(v.__isNew__);\n }\n }}\n // there's a bug in react-select where the menu doesn't recalculate its position when the options are loaded asynchronously\n // see https://github.com/grafana/grafana/issues/63558\n // instead, we explicitly control the menu visibility and prevent showing it until the options have fully loaded\n isOpen={isValuesOpen && !isValuesLoading}\n isLoading={isValuesLoading}\n openMenuOnFocus={true}\n onOpenMenu={async () => {\n setIsValuesLoading(true);\n setIsValuesOpen(true);\n const values = await model._getValuesFor(filter);\n setIsValuesLoading(false);\n setValues(values);\n if (valueHasCustomValue) {\n setValueInputValue(valueValue?.label ?? '');\n }\n }}\n onCloseMenu={() => {\n setIsValuesOpen(false);\n setValueInputValue('');\n }}\n {...(isMultiValue && multiValueProps)}\n />\n );\n\n const keySelect = (\n <Select\n // By changing the key, we reset the Select component,\n // to ensure that the loaded values are shown after they are loaded\n key={`${isValuesLoading ? 'loading' : 'loaded'}`}\n disabled={model.state.readOnly}\n className={cx(styles.key, isKeysOpen ? styles.widthWhenOpen : undefined)}\n width=\"auto\"\n allowCustomValue={model.state.allowCustomValue ?? true}\n createOptionPosition={operatorDefinition?.isRegex ? 'first' : 'last'}\n value={keyValue}\n placeholder={t(\n 'grafana-scenes.variables.ad-hoc-filter-renderer.key-select.placeholder-select-label',\n 'Select label'\n )}\n options={handleOptionGroups(keys)}\n onChange={(v) => {\n model._updateFilter(filter, {\n key: v.value,\n keyLabel: v.label,\n // clear value if key has changed\n value: '',\n valueLabels: [''],\n values: undefined,\n });\n setUncommittedValue([]);\n }}\n autoFocus={filter.key === ''}\n // there's a bug in react-select where the menu doesn't recalculate its position when the options are loaded asynchronously\n // see https://github.com/grafana/grafana/issues/63558\n // instead, we explicitly control the menu visibility and prevent showing it until the options have fully loaded\n isOpen={isKeysOpen && !isKeysLoading}\n isLoading={isKeysLoading}\n onOpenMenu={async () => {\n setIsKeysOpen(true);\n setIsKeysLoading(true);\n const keys = await model._getKeys(filter.key);\n setIsKeysLoading(false);\n setKeys(keys);\n }}\n onCloseMenu={() => {\n setIsKeysOpen(false);\n }}\n onBlur={() => {\n if (filter.key === '') {\n model._removeFilter(filter);\n }\n }}\n openMenuOnFocus={true}\n />\n );\n\n const operatorSelect = (\n <Select\n className={cx(styles.operator, {\n [styles.widthWhenOpen]: isOperatorOpen,\n })}\n value={filter.operator}\n disabled={model.state.readOnly}\n options={model._getOperators()}\n onChange={onOperatorChange}\n onOpenMenu={() => {\n setIsOperatorOpen(true);\n }}\n onCloseMenu={() => {\n setIsOperatorOpen(false);\n }}\n />\n );\n\n if (model.state.layout === 'vertical') {\n if (filter.key) {\n const label = (\n <ControlsLabel layout=\"vertical\" label={filter.key ?? ''} onRemove={() => model._removeFilter(filter)} />\n );\n\n return (\n <Field label={label} data-testid={`AdHocFilter-${filter.key}`} className={styles.field}>\n <div className={styles.wrapper}>\n {operatorSelect}\n {valueSelect}\n </div>\n </Field>\n );\n } else {\n return (\n <Field\n label={t('grafana-scenes.variables.ad-hoc-filter-renderer.label-select-label', 'Select label')}\n data-testid={`AdHocFilter-${filter.key}`}\n className={styles.field}\n >\n {keySelect}\n </Field>\n );\n }\n }\n\n return (\n <div className={styles.wrapper} data-testid={`AdHocFilter-${filter.key}`}>\n {keySelect}\n {operatorSelect}\n {valueSelect}\n <Button\n variant=\"secondary\"\n aria-label={t('grafana-scenes.variables.ad-hoc-filter-renderer.aria-label-remove-filter', 'Remove filter')}\n title={t('grafana-scenes.variables.ad-hoc-filter-renderer.title-remove-filter', 'Remove filter')}\n className={styles.removeButton}\n icon=\"times\"\n data-testid={`AdHocFilter-remove-${filter.key ?? ''}`}\n onClick={() => model._removeFilter(filter)}\n />\n </div>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n field: css({\n marginBottom: 0,\n }),\n wrapper: css({\n display: 'flex',\n '&:first-child': {\n '> :first-child': {\n borderBottomLeftRadius: 0,\n borderTopLeftRadius: 0,\n },\n },\n '> *': {\n '&:not(:first-child)': {\n // Negative margin hides the double-border on adjacent selects\n marginLeft: -1,\n },\n\n '&:first-child': {\n borderTopRightRadius: 0,\n borderBottomRightRadius: 0,\n },\n\n '&:last-child': {\n borderTopLeftRadius: 0,\n borderBottomLeftRadius: 0,\n },\n\n '&:not(:first-child):not(:last-child)': {\n borderRadius: 0,\n },\n\n // Fix focus state zIndex issues\n position: 'relative',\n zIndex: 0,\n\n // Adjacent borders are overlapping, so raise children up when hovering etc\n // so all that child's borders are visible.\n '&:hover': {\n zIndex: 1,\n },\n\n '&:focus-within': {\n zIndex: 2,\n },\n },\n }),\n widthWhenOpen: css({\n minWidth: theme.spacing(16),\n }),\n value: css({\n flexBasis: 'content',\n flexShrink: 1,\n minWidth: '90px',\n }),\n key: css({\n flexBasis: 'content',\n minWidth: '90px',\n flexShrink: 1,\n }),\n operator: css({\n flexShrink: 0,\n flexBasis: 'content',\n }),\n removeButton: css({\n paddingLeft: theme.spacing(3 / 2),\n paddingRight: theme.spacing(3 / 2),\n borderLeft: 'none',\n width: theme.spacing(3),\n marginRight: theme.spacing(1),\n boxSizing: 'border-box',\n // To not have button background and last select border intersect\n position: 'relative',\n left: '1px',\n }),\n});\n"],"names":["_a","_b","values","keys"],"mappings":"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"}
|
package/dist/index.js
CHANGED
@@ -3603,7 +3603,7 @@ function wrapInSafeSerializableSceneObject(sceneObject) {
|
|
3603
3603
|
function DefaultGroupByCustomIndicatorContainer(props) {
|
3604
3604
|
const { model } = props;
|
3605
3605
|
const theme = ui.useTheme2();
|
3606
|
-
const styles = getStyles$
|
3606
|
+
const styles = getStyles$j(theme);
|
3607
3607
|
const inputStyles = ui.getInputStyles({ theme, invalid: false });
|
3608
3608
|
const value = lodash.isArray(model.state.value) ? model.state.value : model.state.value ? [model.state.value] : [];
|
3609
3609
|
let buttons = [];
|
@@ -3685,7 +3685,7 @@ function DefaultGroupByCustomIndicatorContainer(props) {
|
|
3685
3685
|
buttons
|
3686
3686
|
);
|
3687
3687
|
}
|
3688
|
-
const getStyles$
|
3688
|
+
const getStyles$j = (theme) => ({
|
3689
3689
|
clearIcon: css.css({
|
3690
3690
|
color: theme.colors.action.disabledText,
|
3691
3691
|
cursor: "pointer",
|
@@ -4206,7 +4206,7 @@ function LoadingIndicator(props) {
|
|
4206
4206
|
}
|
4207
4207
|
|
4208
4208
|
function ControlsLabel(props) {
|
4209
|
-
const styles = ui.useStyles2(getStyles$
|
4209
|
+
const styles = ui.useStyles2(getStyles$i);
|
4210
4210
|
const theme = ui.useTheme2();
|
4211
4211
|
const isVertical = props.layout === "vertical";
|
4212
4212
|
const loadingIndicator = Boolean(props.isLoading) ? /* @__PURE__ */ React__default.default.createElement(
|
@@ -4253,7 +4253,7 @@ function ControlsLabel(props) {
|
|
4253
4253
|
}
|
4254
4254
|
return labelElement;
|
4255
4255
|
}
|
4256
|
-
const getStyles$
|
4256
|
+
const getStyles$i = (theme) => ({
|
4257
4257
|
horizontalLabel: css.css({
|
4258
4258
|
background: theme.isDark ? theme.colors.background.primary : theme.colors.background.secondary,
|
4259
4259
|
display: `flex`,
|
@@ -4306,7 +4306,7 @@ function keyLabelToOption(key, label) {
|
|
4306
4306
|
const filterNoOp = () => true;
|
4307
4307
|
function AdHocFilterRenderer({ filter, model }) {
|
4308
4308
|
var _a, _b, _c, _d, _e;
|
4309
|
-
const styles = ui.useStyles2(getStyles$
|
4309
|
+
const styles = ui.useStyles2(getStyles$h);
|
4310
4310
|
const [keys, setKeys] = React.useState([]);
|
4311
4311
|
const [values, setValues] = React.useState([]);
|
4312
4312
|
const [isKeysLoading, setIsKeysLoading] = React.useState(false);
|
@@ -4533,12 +4533,18 @@ function AdHocFilterRenderer({ filter, model }) {
|
|
4533
4533
|
}
|
4534
4534
|
));
|
4535
4535
|
}
|
4536
|
-
const getStyles$
|
4536
|
+
const getStyles$h = (theme) => ({
|
4537
4537
|
field: css.css({
|
4538
4538
|
marginBottom: 0
|
4539
4539
|
}),
|
4540
4540
|
wrapper: css.css({
|
4541
4541
|
display: "flex",
|
4542
|
+
"&:first-child": {
|
4543
|
+
"> :first-child": {
|
4544
|
+
borderBottomLeftRadius: 0,
|
4545
|
+
borderTopLeftRadius: 0
|
4546
|
+
}
|
4547
|
+
},
|
4542
4548
|
"> *": {
|
4543
4549
|
"&:not(:first-child)": {
|
4544
4550
|
// Negative margin hides the double-border on adjacent selects
|
@@ -4600,6 +4606,7 @@ const getStyles$g = (theme) => ({
|
|
4600
4606
|
|
4601
4607
|
function AdHocFilterBuilder({ model, addFilterButtonText }) {
|
4602
4608
|
const { _wip } = model.useState();
|
4609
|
+
const styles = ui.useStyles2(getStyles$g);
|
4603
4610
|
if (!_wip) {
|
4604
4611
|
return /* @__PURE__ */ React__default.default.createElement(
|
4605
4612
|
ui.Button,
|
@@ -4609,13 +4616,22 @@ function AdHocFilterBuilder({ model, addFilterButtonText }) {
|
|
4609
4616
|
title: i18n.t("grafana-scenes.variables.ad-hoc-filter-builder.title-add-filter", "Add filter"),
|
4610
4617
|
"aria-label": i18n.t("grafana-scenes.variables.ad-hoc-filter-builder.aria-label-add-filter", "Add filter"),
|
4611
4618
|
"data-testid": `AdHocFilter-add`,
|
4612
|
-
onClick: () => model._addWip()
|
4619
|
+
onClick: () => model._addWip(),
|
4620
|
+
className: styles.addButton
|
4613
4621
|
},
|
4614
4622
|
addFilterButtonText
|
4615
4623
|
);
|
4616
4624
|
}
|
4617
4625
|
return /* @__PURE__ */ React__default.default.createElement(AdHocFilterRenderer, { filter: _wip, model });
|
4618
4626
|
}
|
4627
|
+
const getStyles$g = (theme) => ({
|
4628
|
+
addButton: css.css({
|
4629
|
+
"&:first-child": {
|
4630
|
+
borderBottomLeftRadius: 0,
|
4631
|
+
borderTopLeftRadius: 0
|
4632
|
+
}
|
4633
|
+
})
|
4634
|
+
});
|
4619
4635
|
|
4620
4636
|
class AdHocFiltersVariableUrlSyncHandler {
|
4621
4637
|
constructor(_variable) {
|