From 56ce88dea3b38d7ac5419b669546d60cde36d442 Mon Sep 17 00:00:00 2001 From: Bogdan Matei Date: Mon, 10 Jun 2024 10:09:59 +0300 Subject: [PATCH] Filters: Introduce enrichFiltersRequest (#88913) --- package.json | 2 +- packages/grafana-data/src/types/datasource.ts | 2 ++ .../dashboard-scene/scene/DashboardScene.tsx | 17 ++++++++- .../scene/Scopes/ScopesScene.test.tsx | 36 +++++++++++++++++-- .../scene/Scopes/testUtils.tsx | 24 ++++++++++++- yarn.lock | 10 +++--- 6 files changed, 81 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index 0d55dce852d..31fc060a9c4 100644 --- a/package.json +++ b/package.json @@ -258,7 +258,7 @@ "@grafana/prometheus": "workspace:*", "@grafana/runtime": "workspace:*", "@grafana/saga-icons": "workspace:*", - "@grafana/scenes": "4.27.0", + "@grafana/scenes": "4.29.0", "@grafana/schema": "workspace:*", "@grafana/sql": "workspace:*", "@grafana/ui": "workspace:*", diff --git a/packages/grafana-data/src/types/datasource.ts b/packages/grafana-data/src/types/datasource.ts index a1355c10f8c..cd22fb00b64 100644 --- a/packages/grafana-data/src/types/datasource.ts +++ b/packages/grafana-data/src/types/datasource.ts @@ -375,6 +375,7 @@ export interface DataSourceGetTagKeysOptions { }; } + public enrichFiltersRequest(): Partial { + return { + scopes: this.state.scopes?.getSelectedScopes(), + }; + } + canEditDashboard() { const { meta } = this.state; diff --git a/public/app/features/dashboard-scene/scene/Scopes/ScopesScene.test.tsx b/public/app/features/dashboard-scene/scene/Scopes/ScopesScene.test.tsx index d354e4276d7..d88983f7a48 100644 --- a/public/app/features/dashboard-scene/scene/Scopes/ScopesScene.test.tsx +++ b/public/app/features/dashboard-scene/scene/Scopes/ScopesScene.test.tsx @@ -377,8 +377,8 @@ describe('ScopesScene', () => { }); }); - describe('Data requests', () => { - it('Enriches data requests', async () => { + describe('Enrichers', () => { + it('Data requests', async () => { await userEvents.click(getBasicInput()); await userEvents.click(getApplicationsExpand()); await userEvents.click(getApplicationsSlothPictureFactorySelect()); @@ -412,6 +412,38 @@ describe('ScopesScene', () => { ); }); }); + + it('Filters requests', async () => { + await userEvents.click(getBasicInput()); + await userEvents.click(getApplicationsExpand()); + await userEvents.click(getApplicationsSlothPictureFactorySelect()); + await userEvents.click(getBasicInput()); + await waitFor(() => { + expect(dashboardScene.enrichFiltersRequest().scopes).toEqual( + mocksScopes.filter(({ metadata: { name } }) => name === 'slothPictureFactory') + ); + }); + + await userEvents.click(getBasicInput()); + await userEvents.click(getApplicationsSlothVoteTrackerSelect()); + await userEvents.click(getBasicInput()); + await waitFor(() => { + expect(dashboardScene.enrichFiltersRequest().scopes).toEqual( + mocksScopes.filter( + ({ metadata: { name } }) => name === 'slothPictureFactory' || name === 'slothVoteTracker' + ) + ); + }); + + await userEvents.click(getBasicInput()); + await userEvents.click(getApplicationsSlothPictureFactorySelect()); + await userEvents.click(getBasicInput()); + await waitFor(() => { + expect(dashboardScene.enrichFiltersRequest().scopes).toEqual( + mocksScopes.filter(({ metadata: { name } }) => name === 'slothVoteTracker') + ); + }); + }); }); }); }); diff --git a/public/app/features/dashboard-scene/scene/Scopes/testUtils.tsx b/public/app/features/dashboard-scene/scene/Scopes/testUtils.tsx index 7288f5f29e4..49768ffda74 100644 --- a/public/app/features/dashboard-scene/scene/Scopes/testUtils.tsx +++ b/public/app/features/dashboard-scene/scene/Scopes/testUtils.tsx @@ -3,7 +3,17 @@ import React from 'react'; import { render } from 'test/test-utils'; import { Scope, ScopeDashboardBinding, ScopeNode } from '@grafana/data'; -import { behaviors, SceneGridItem, SceneGridLayout, SceneQueryRunner, SceneTimeRange, VizPanel } from '@grafana/scenes'; +import { + AdHocFiltersVariable, + behaviors, + GroupByVariable, + SceneGridItem, + SceneGridLayout, + SceneQueryRunner, + SceneTimeRange, + SceneVariableSet, + VizPanel, +} from '@grafana/scenes'; import { DashboardControls } from 'app/features/dashboard-scene/scene//DashboardControls'; import { DashboardScene } from 'app/features/dashboard-scene/scene/DashboardScene'; @@ -304,6 +314,18 @@ export function buildTestScene(overrides: Partial = {}) { }), controls: new DashboardControls({}), $behaviors: [new behaviors.CursorSync({})], + $variables: new SceneVariableSet({ + variables: [ + new AdHocFiltersVariable({ + name: 'adhoc', + datasource: { uid: 'my-ds-uid' }, + }), + new GroupByVariable({ + name: 'groupby', + datasource: { uid: 'my-ds-uid' }, + }), + ], + }), body: new SceneGridLayout({ children: [ new SceneGridItem({ diff --git a/yarn.lock b/yarn.lock index e91df03c210..f857837a013 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3513,9 +3513,9 @@ __metadata: languageName: unknown linkType: soft -"@grafana/scenes@npm:4.27.0": - version: 4.27.0 - resolution: "@grafana/scenes@npm:4.27.0" +"@grafana/scenes@npm:4.29.0": + version: 4.29.0 + resolution: "@grafana/scenes@npm:4.29.0" dependencies: "@grafana/e2e-selectors": "npm:^11.0.0" "@leeoniya/ufuzzy": "npm:^1.0.14" @@ -3530,7 +3530,7 @@ __metadata: "@grafana/ui": ^10.4.1 react: ^18.0.0 react-dom: ^18.0.0 - checksum: 10/db072541da50cece2ccc2cd8965daa0ac83a77ab423aa576b9bfd08bb227727d5187bf4e27b0f8578d6fd1ba8fe38e2dafc73c0e74b627ff926915cf744830a2 + checksum: 10/5da9b2ae9093f4c3ed012eeea58ce0dc66ddeabb02d2b0d4a87917f17463c857ccab5df23142cfc62323991e714a1a3f4d38d5956cdfe455ce57edcc82fe6893 languageName: node linkType: hard @@ -16981,7 +16981,7 @@ __metadata: "@grafana/prometheus": "workspace:*" "@grafana/runtime": "workspace:*" "@grafana/saga-icons": "workspace:*" - "@grafana/scenes": "npm:4.27.0" + "@grafana/scenes": "npm:4.29.0" "@grafana/schema": "workspace:*" "@grafana/sql": "workspace:*" "@grafana/tsconfig": "npm:^1.3.0-rc1"