From 8e8bfae7617ab0fcce26e55a2bd71846918bacd3 Mon Sep 17 00:00:00 2001 From: Juan Cabanas Date: Fri, 5 Apr 2024 11:29:13 -0300 Subject: [PATCH] Scenes: Add PDF tab in share modal (#85541) --- public/app/features/variables/utils.test.ts | 28 +++++++++++++++++++++ public/app/features/variables/utils.ts | 18 ++++++++++++- 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/public/app/features/variables/utils.test.ts b/public/app/features/variables/utils.test.ts index 5f3e21039fd..ada7fd4e3db 100644 --- a/public/app/features/variables/utils.test.ts +++ b/public/app/features/variables/utils.test.ts @@ -1,4 +1,5 @@ import { UrlQueryMap } from '@grafana/data'; +import { locationService } from '@grafana/runtime'; import { VariableRefresh } from './types'; import { @@ -7,9 +8,17 @@ import { findTemplateVarChanges, getCurrentText, getVariableRefresh, + getVariablesFromUrl, isAllVariable, } from './utils'; +jest.mock('@grafana/runtime', () => ({ + ...jest.requireActual('@grafana/runtime'), + getTemplateSrv: () => ({ + getVariables: () => [{ name: 'query0' }, { name: 'query1' }], + }), +})); + describe('isAllVariable', () => { it.each` variable | expected @@ -202,3 +211,22 @@ describe('containsVariable', () => { expect(containsVariable(value, 'var')).toEqual(expected); }); }); + +describe('getVariablesFromUrl', () => { + it('when called with simple var values for a var, then it returns just the value', () => { + locationService.push('/test?orgId=1&var-query0=1&var-query1=value1'); + const expected = { + query0: '1', + query1: 'value1', + }; + expect(getVariablesFromUrl()).toEqual(expected); + }); + it('when called with multiple var values for the same var, then it returns the correct array', () => { + locationService.push('/test?orgId=1&var-query0=1&var-query1=value1&var-query1=value2&var-query1=value3'); + const expected = { + query0: '1', + query1: ['value1', 'value2', 'value3'], + }; + expect(getVariablesFromUrl()).toEqual(expected); + }); +}); diff --git a/public/app/features/variables/utils.ts b/public/app/features/variables/utils.ts index 4372ff37bea..aa6d033bd6f 100644 --- a/public/app/features/variables/utils.ts +++ b/public/app/features/variables/utils.ts @@ -10,7 +10,7 @@ import { VariableWithOptions, QueryVariableModel, } from '@grafana/data'; -import { getTemplateSrv } from '@grafana/runtime'; +import { getTemplateSrv, locationService } from '@grafana/runtime'; import { safeStringifyValue } from 'app/core/utils/explore'; import { getState } from '../../store/store'; @@ -292,3 +292,19 @@ export function toVariablePayload( ): VariablePayload { return { type: obj.type, id: obj.id, data: data as T }; } + +export function getVariablesFromUrl() { + const variables = getTemplateSrv().getVariables(); + const queryParams = locationService.getSearchObject(); + + return Object.keys(queryParams) + .filter( + (key) => key.indexOf(VARIABLE_PREFIX) !== -1 && variables.some((v) => v.name === key.replace(VARIABLE_PREFIX, '')) + ) + .reduce((obj, key) => { + const variableName = key.replace(VARIABLE_PREFIX, ''); + obj[variableName] = queryParams[key]; + + return obj; + }, {}); +}