From 5d07b1c8841ae8c71d92f1a73073022c80abb067 Mon Sep 17 00:00:00 2001 From: Andres Martinez Gotor Date: Wed, 19 Jul 2023 13:56:14 +0200 Subject: [PATCH] Chore: Move getSearchFilterScopedVar to @grafana/data (#71839) --- packages/grafana-data/src/utils/index.ts | 1 + packages/grafana-data/src/utils/variables.ts | 33 ++++++++++++++++++ .../plugins/sql/datasource/SqlDatasource.ts | 3 +- .../pickers/OptionsPicker/actions.ts | 4 +-- .../pickers/OptionsPicker/reducer.ts | 3 +- public/app/features/variables/utils.ts | 34 +------------------ .../plugins/datasource/graphite/datasource.ts | 3 +- .../plugins/datasource/testdata/datasource.ts | 2 +- 8 files changed, 43 insertions(+), 40 deletions(-) create mode 100644 packages/grafana-data/src/utils/variables.ts diff --git a/packages/grafana-data/src/utils/index.ts b/packages/grafana-data/src/utils/index.ts index 53b6c632d5f..b54d3864845 100644 --- a/packages/grafana-data/src/utils/index.ts +++ b/packages/grafana-data/src/utils/index.ts @@ -23,3 +23,4 @@ export { makeClassES5Compatible } from './makeClassES5Compatible'; export { anyToNumber } from './anyToNumber'; export { withLoadingIndicator, type WithLoadingIndicatorOptions } from './withLoadingIndicator'; export { convertOldAngularValueMappings, LegacyMappingType } from './valueMappings'; +export { containsSearchFilter, type SearchFilterOptions, getSearchFilterScopedVar } from './variables'; diff --git a/packages/grafana-data/src/utils/variables.ts b/packages/grafana-data/src/utils/variables.ts new file mode 100644 index 00000000000..2002472d174 --- /dev/null +++ b/packages/grafana-data/src/utils/variables.ts @@ -0,0 +1,33 @@ +import { ScopedVars } from '../types'; + +const SEARCH_FILTER_VARIABLE = '__searchFilter'; + +export const containsSearchFilter = (query: string | unknown): boolean => + query && typeof query === 'string' ? query.indexOf(SEARCH_FILTER_VARIABLE) !== -1 : false; + +export interface SearchFilterOptions { + searchFilter?: string; +} + +export const getSearchFilterScopedVar = (args: { + query: string; + wildcardChar: string; + options?: SearchFilterOptions; +}): ScopedVars => { + const { query, wildcardChar } = args; + if (!containsSearchFilter(query)) { + return {}; + } + + let { options } = args; + + options = options || { searchFilter: '' }; + const value = options.searchFilter ? `${options.searchFilter}${wildcardChar}` : `${wildcardChar}`; + + return { + __searchFilter: { + value, + text: '', + }, + }; +}; diff --git a/public/app/features/plugins/sql/datasource/SqlDatasource.ts b/public/app/features/plugins/sql/datasource/SqlDatasource.ts index 52ed77356e2..284b5758367 100644 --- a/public/app/features/plugins/sql/datasource/SqlDatasource.ts +++ b/public/app/features/plugins/sql/datasource/SqlDatasource.ts @@ -13,6 +13,8 @@ import { ScopedVars, TimeRange, CoreApp, + getSearchFilterScopedVar, + SearchFilterOptions, } from '@grafana/data'; import { EditorMode } from '@grafana/experimental'; import { @@ -27,7 +29,6 @@ import { toDataQueryResponse } from '@grafana/runtime/src/utils/queryResponse'; import { getTimeSrv } from 'app/features/dashboard/services/TimeSrv'; import { VariableWithMultiSupport } from '../../../variables/types'; -import { getSearchFilterScopedVar, SearchFilterOptions } from '../../../variables/utils'; import { ResponseParser } from '../ResponseParser'; import { SqlQueryEditor } from '../components/QueryEditor'; import { MACRO_NAMES } from '../constants'; diff --git a/public/app/features/variables/pickers/OptionsPicker/actions.ts b/public/app/features/variables/pickers/OptionsPicker/actions.ts index e7432840dd5..35ee1aa2d6a 100644 --- a/public/app/features/variables/pickers/OptionsPicker/actions.ts +++ b/public/app/features/variables/pickers/OptionsPicker/actions.ts @@ -1,6 +1,6 @@ import { debounce, trim } from 'lodash'; -import { isEmptyObject } from '@grafana/data'; +import { isEmptyObject, containsSearchFilter } from '@grafana/data'; import { StoreState, ThunkDispatch, ThunkResult } from 'app/types'; import { variableAdapters } from '../../adapters'; @@ -10,7 +10,7 @@ import { getVariable, getVariablesState } from '../../state/selectors'; import { changeVariableProp, setCurrentVariableValue } from '../../state/sharedReducer'; import { KeyedVariableIdentifier } from '../../state/types'; import { VariableOption, VariableWithOptions } from '../../types'; -import { containsSearchFilter, getCurrentValue, toVariablePayload } from '../../utils'; +import { getCurrentValue, toVariablePayload } from '../../utils'; import { NavigationKey } from '../types'; import { diff --git a/public/app/features/variables/pickers/OptionsPicker/reducer.ts b/public/app/features/variables/pickers/OptionsPicker/reducer.ts index 4d0d32d4f20..c5ca9bfb12e 100644 --- a/public/app/features/variables/pickers/OptionsPicker/reducer.ts +++ b/public/app/features/variables/pickers/OptionsPicker/reducer.ts @@ -1,11 +1,12 @@ import { createSlice, PayloadAction } from '@reduxjs/toolkit'; import { cloneDeep, isString, trimStart } from 'lodash'; +import { containsSearchFilter } from '@grafana/data'; + import { applyStateChanges } from '../../../../core/utils/applyStateChanges'; import { ALL_VARIABLE_VALUE } from '../../constants'; import { isMulti, isQuery } from '../../guard'; import { VariableOption, VariableWithOptions } from '../../types'; -import { containsSearchFilter } from '../../utils'; export interface ToggleOption { option?: VariableOption; diff --git a/public/app/features/variables/utils.ts b/public/app/features/variables/utils.ts index a73bce617a1..2c5bbdf29bf 100644 --- a/public/app/features/variables/utils.ts +++ b/public/app/features/variables/utils.ts @@ -1,6 +1,6 @@ import { isArray, isEqual } from 'lodash'; -import { ScopedVars, UrlQueryMap, UrlQueryValue, VariableType } from '@grafana/data'; +import { UrlQueryMap, UrlQueryValue, VariableType } from '@grafana/data'; import { getTemplateSrv } from '@grafana/runtime'; import { safeStringifyValue } from 'app/core/utils/explore'; @@ -29,38 +29,6 @@ export const variableRegexExec = (variableString: string) => { return variableRegex.exec(variableString); }; -export const SEARCH_FILTER_VARIABLE = '__searchFilter'; - -export const containsSearchFilter = (query: string | unknown): boolean => - query && typeof query === 'string' ? query.indexOf(SEARCH_FILTER_VARIABLE) !== -1 : false; - -export interface SearchFilterOptions { - searchFilter?: string; -} - -export const getSearchFilterScopedVar = (args: { - query: string; - wildcardChar: string; - options?: SearchFilterOptions; -}): ScopedVars => { - const { query, wildcardChar } = args; - if (!containsSearchFilter(query)) { - return {}; - } - - let { options } = args; - - options = options || { searchFilter: '' }; - const value = options.searchFilter ? `${options.searchFilter}${wildcardChar}` : `${wildcardChar}`; - - return { - __searchFilter: { - value, - text: '', - }, - }; -}; - export function containsVariable(...args: any[]) { const variableName = args[args.length - 1]; args[0] = typeof args[0] === 'string' ? args[0] : safeStringifyValue(args[0]); diff --git a/public/app/plugins/datasource/graphite/datasource.ts b/public/app/plugins/datasource/graphite/datasource.ts index c8de04dc765..2577d402e2f 100644 --- a/public/app/plugins/datasource/graphite/datasource.ts +++ b/public/app/plugins/datasource/graphite/datasource.ts @@ -19,14 +19,13 @@ import { TimeRange, TimeZone, toDataFrame, + getSearchFilterScopedVar, } from '@grafana/data'; import { getBackendSrv } from '@grafana/runtime'; import { isVersionGtOrEq, SemVersion } from 'app/core/utils/version'; import { getTemplateSrv, TemplateSrv } from 'app/features/templating/template_srv'; import { getRollupNotice, getRuntimeConsolidationNotice } from 'app/plugins/datasource/graphite/meta'; -import { getSearchFilterScopedVar } from '../../../features/variables/utils'; - import { AnnotationEditor } from './components/AnnotationsEditor'; import { convertToGraphiteQueryObject } from './components/helpers'; import gfunc, { FuncDefs, FuncInstance } from './gfunc'; diff --git a/public/app/plugins/datasource/testdata/datasource.ts b/public/app/plugins/datasource/testdata/datasource.ts index f364479d35b..a34b6ca608b 100644 --- a/public/app/plugins/datasource/testdata/datasource.ts +++ b/public/app/plugins/datasource/testdata/datasource.ts @@ -16,9 +16,9 @@ import { toDataFrame, MutableDataFrame, AnnotationQuery, + getSearchFilterScopedVar, } from '@grafana/data'; import { DataSourceWithBackend, getBackendSrv, getGrafanaLiveSrv, getTemplateSrv, TemplateSrv } from '@grafana/runtime'; -import { getSearchFilterScopedVar } from 'app/features/variables/utils'; import { Scenario, TestData, TestDataQueryType } from './dataquery.gen'; import { queryMetricTree } from './metricTree';