Bump scenes and fix types (#105167)

* bump scenes and fix types

* bump scenes

* refactor

* refactor + test

* naming
This commit is contained in:
Victor Marin 2025-05-13 09:29:02 +03:00 committed by GitHub
parent c92ff0ca75
commit c6428dfc74
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 167 additions and 18 deletions

View File

@ -282,8 +282,8 @@
"@grafana/plugin-ui": "0.10.5",
"@grafana/prometheus": "workspace:*",
"@grafana/runtime": "workspace:*",
"@grafana/scenes": "6.10.2",
"@grafana/scenes-react": "6.10.2",
"@grafana/scenes": "6.10.4",
"@grafana/scenes-react": "6.10.4",
"@grafana/schema": "workspace:*",
"@grafana/sql": "workspace:*",
"@grafana/ui": "workspace:*",

View File

@ -552,6 +552,132 @@ describe('sceneVariablesSetToVariables', () => {
`);
});
describe('should adapt AdHocFiltersVariable filters', () => {
it('should remove origin from filter if its not dashboard or scope', () => {
const variable = new AdHocFiltersVariable({
name: 'test',
allowCustomValue: true,
label: 'test-label',
description: 'test-desc',
datasource: { uid: 'fake-std', type: 'fake-std' },
filters: [
{
key: 'filterTest',
operator: '=',
value: 'test',
origin: 'asserts',
},
],
baseFilters: [
{
key: 'baseFilterTest',
operator: '=',
value: 'test',
origin: 'asserts',
},
],
});
const set = new SceneVariableSet({
variables: [variable],
});
const result = sceneVariablesSetToVariables(set);
expect(result).toHaveLength(1);
expect(result[0]).toMatchInlineSnapshot(`
{
"allowCustomValue": true,
"baseFilters": [
{
"key": "baseFilterTest",
"operator": "=",
"value": "test",
},
],
"datasource": {
"type": "fake-std",
"uid": "fake-std",
},
"defaultKeys": undefined,
"description": "test-desc",
"filters": [
{
"key": "filterTest",
"operator": "=",
"value": "test",
},
],
"label": "test-label",
"name": "test",
"type": "adhoc",
}
`);
});
it('should maintain dashboard or scope origin', () => {
const variable = new AdHocFiltersVariable({
name: 'test',
allowCustomValue: true,
label: 'test-label',
description: 'test-desc',
datasource: { uid: 'fake-std', type: 'fake-std' },
filters: [
{
key: 'filterTest',
operator: '=',
value: 'test',
origin: 'dashboard',
},
],
baseFilters: [
{
key: 'baseFilterTest',
operator: '=',
value: 'test',
origin: 'scope',
},
],
});
const set = new SceneVariableSet({
variables: [variable],
});
const result = sceneVariablesSetToVariables(set);
expect(result).toHaveLength(1);
expect(result[0]).toMatchInlineSnapshot(`
{
"allowCustomValue": true,
"baseFilters": [
{
"key": "baseFilterTest",
"operator": "=",
"origin": "scope",
"value": "test",
},
],
"datasource": {
"type": "fake-std",
"uid": "fake-std",
},
"defaultKeys": undefined,
"description": "test-desc",
"filters": [
{
"key": "filterTest",
"operator": "=",
"origin": "dashboard",
"value": "test",
},
],
"label": "test-label",
"name": "test",
"type": "adhoc",
}
`);
});
});
it('should handle AdHocFiltersVariable with defaultKeys', () => {
const variable = new AdHocFiltersVariable({
name: 'test',

View File

@ -1,5 +1,10 @@
import { config } from '@grafana/runtime';
import { MultiValueVariable, SceneVariables, sceneUtils } from '@grafana/scenes';
import {
AdHocFilterWithLabels as SceneAdHocFilterWithLabels,
MultiValueVariable,
SceneVariables,
sceneUtils,
} from '@grafana/scenes';
import {
VariableModel,
VariableRefresh as OldVariableRefresh,
@ -18,6 +23,7 @@ import {
GroupByVariableKind,
defaultVariableHide,
VariableOption,
AdHocFilterWithLabels,
} from '@grafana/schema/dist/esm/schema/dashboard/v2alpha1/types.spec.gen';
import { getIntervalsQueryFromNewIntervalModel } from '../utils/utils';
@ -181,8 +187,8 @@ export function sceneVariablesSetToVariables(set: SceneVariables, keepQueryOptio
datasource: variable.state.datasource,
allowCustomValue: variable.state.allowCustomValue,
// @ts-expect-error
baseFilters: variable.state.baseFilters,
filters: variable.state.filters,
baseFilters: validateFiltersOrigin(variable.state.baseFilters),
filters: validateFiltersOrigin(variable.state.filters),
defaultKeys: variable.state.defaultKeys,
});
} else {
@ -423,8 +429,8 @@ export function sceneVariablesSetToSchemaV2Variables(
...commonProperties,
name: variable.state.name,
datasource: variable.state.datasource || {}, //FIXME what is the default value?
baseFilters: variable.state.baseFilters || [],
filters: variable.state.filters,
baseFilters: validateFiltersOrigin(variable.state.baseFilters),
filters: validateFiltersOrigin(variable.state.filters),
defaultKeys: variable.state.defaultKeys || [], //FIXME what is the default value?
},
};
@ -436,3 +442,20 @@ export function sceneVariablesSetToSchemaV2Variables(
return variables;
}
function validateFiltersOrigin(filters?: SceneAdHocFilterWithLabels[]): AdHocFilterWithLabels[] {
return (
filters?.map((filter) => {
const { origin: initialOrigin, ...restOfFilter } = filter;
if (initialOrigin === 'dashboard' || initialOrigin === 'scope') {
return {
...restOfFilter,
origin: initialOrigin,
};
}
return restOfFilter;
}) || []
);
}

View File

@ -3469,11 +3469,11 @@ __metadata:
languageName: unknown
linkType: soft
"@grafana/scenes-react@npm:6.10.2":
version: 6.10.2
resolution: "@grafana/scenes-react@npm:6.10.2"
"@grafana/scenes-react@npm:6.10.4":
version: 6.10.4
resolution: "@grafana/scenes-react@npm:6.10.4"
dependencies:
"@grafana/scenes": "npm:6.10.2"
"@grafana/scenes": "npm:6.10.4"
lru-cache: "npm:^10.2.2"
react-use: "npm:^17.4.0"
peerDependencies:
@ -3485,13 +3485,13 @@ __metadata:
react: ^18.0.0
react-dom: ^18.0.0
react-router-dom: ^6.28.0
checksum: 10/f87d51654becdbb9c703b04d60532413ccb3d963e6addb6577d4fe4b96a99d52e792cd12c6fed102b2a01c07266cac29061d1f38cb43e5929ea892c6093ea671
checksum: 10/73aee4eca47a27e1fbb7a8f09ddf6a365b121cb361b01c7daabf698677f192c188de0dd64a424db4195139f625660f40371619abbb95a999e14c94e313e25755
languageName: node
linkType: hard
"@grafana/scenes@npm:6.10.2":
version: 6.10.2
resolution: "@grafana/scenes@npm:6.10.2"
"@grafana/scenes@npm:6.10.4":
version: 6.10.4
resolution: "@grafana/scenes@npm:6.10.4"
dependencies:
"@floating-ui/react": "npm:^0.26.16"
"@leeoniya/ufuzzy": "npm:^1.0.16"
@ -3509,7 +3509,7 @@ __metadata:
react: ^18.0.0
react-dom: ^18.0.0
react-router-dom: ^6.28.0
checksum: 10/4a6acc3e3f2ceb3316fcdb8cba79d54b3fca0130f05d480349bfc726ca6624cba6acf2333d96a292cc1a573f578274b1e85b7ba7c0096deda3fb02feb0179e3d
checksum: 10/ffd51ad71fe3b89c3cd16bfaa0f11e003bf11e4a4fb7513c5c55fdc5e569f51dcf9fb70cb125e63b5b2269d68e86a961769e07a8078cad70163de2c2ed779ef7
languageName: node
linkType: hard
@ -17700,8 +17700,8 @@ __metadata:
"@grafana/plugin-ui": "npm:0.10.5"
"@grafana/prometheus": "workspace:*"
"@grafana/runtime": "workspace:*"
"@grafana/scenes": "npm:6.10.2"
"@grafana/scenes-react": "npm:6.10.2"
"@grafana/scenes": "npm:6.10.4"
"@grafana/scenes-react": "npm:6.10.4"
"@grafana/schema": "workspace:*"
"@grafana/sql": "workspace:*"
"@grafana/tsconfig": "npm:^2.0.0"