mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Variables: replaces UUID with name for a more performant lookup in TemplateSrv (#22858)
* Refactor: renames uuid to id * Refactor: misc renames * Refactor: fixes renaming of variable * Refactor: changes method accessed by templateSrv * Refactor: fixes for NEW_VARIABLE_ID * Refactor: rename flow refactor * Tests: adds missing reducer and action tests * Refactor: keeping tests consitent * Chore: reorder imports * Chore: removes uuid package * Refactor: fixes imports
This commit is contained in:
@@ -163,7 +163,7 @@ describe('query actions', () => {
|
||||
const tester = await reduxTester<{ templating: TemplatingState }>()
|
||||
.givenRootReducer(getTemplatingRootReducer())
|
||||
.whenActionIsDispatched(initDashboardTemplating([variable]))
|
||||
.whenActionIsDispatched(setIdInEditor({ id: variable.uuid! }))
|
||||
.whenActionIsDispatched(setIdInEditor({ id: variable.id! }))
|
||||
.whenAsyncActionIsDispatched(updateQueryVariableOptions(toVariablePayload(variable)), true);
|
||||
|
||||
const option = createOption(ALL_VARIABLE_TEXT, ALL_VARIABLE_VALUE);
|
||||
@@ -190,7 +190,7 @@ describe('query actions', () => {
|
||||
const tester = await reduxTester<{ templating: TemplatingState }>()
|
||||
.givenRootReducer(getTemplatingRootReducer())
|
||||
.whenActionIsDispatched(initDashboardTemplating([variable]))
|
||||
.whenActionIsDispatched(setIdInEditor({ id: variable.uuid! }))
|
||||
.whenActionIsDispatched(setIdInEditor({ id: variable.id! }))
|
||||
.whenAsyncActionIsDispatched(updateQueryVariableOptions(toVariablePayload(variable)), true);
|
||||
|
||||
tester.thenDispatchedActionsPredicateShouldEqual(actions => {
|
||||
@@ -530,7 +530,7 @@ function mockDatasourceMetrics(variable: QueryVariableModel, optionsMetrics: any
|
||||
function createVariable(extend?: Partial<QueryVariableModel>): QueryVariableModel {
|
||||
return {
|
||||
type: 'query',
|
||||
uuid: '0',
|
||||
id: '0',
|
||||
global: false,
|
||||
current: createOption(''),
|
||||
options: [],
|
||||
|
||||
@@ -20,9 +20,9 @@ export const updateQueryVariableOptions = (
|
||||
searchFilter?: string
|
||||
): ThunkResult<void> => {
|
||||
return async (dispatch, getState) => {
|
||||
const variableInState = getVariable<QueryVariableModel>(identifier.uuid!, getState());
|
||||
const variableInState = getVariable<QueryVariableModel>(identifier.id!, getState());
|
||||
try {
|
||||
if (getState().templating.editor.id === variableInState.uuid) {
|
||||
if (getState().templating.editor.id === variableInState.id) {
|
||||
dispatch(removeVariableEditorError({ errorProp: 'update' }));
|
||||
}
|
||||
const dataSource = await getDatasourceSrv().get(variableInState.datasource ?? '');
|
||||
@@ -49,7 +49,7 @@ export const updateQueryVariableOptions = (
|
||||
if (err.data && err.data.message) {
|
||||
err.message = err.data.message;
|
||||
}
|
||||
if (getState().templating.editor.id === variableInState.uuid) {
|
||||
if (getState().templating.editor.id === variableInState.id) {
|
||||
dispatch(addVariableEditorError({ errorProp: 'update', errorText: err.message }));
|
||||
}
|
||||
appEvents.emit(AppEvents.alertError, [
|
||||
@@ -72,7 +72,7 @@ export const initQueryVariableEditor = (identifier: VariableIdentifier): ThunkRe
|
||||
const allDataSources = [defaultDatasource].concat(dataSources);
|
||||
dispatch(changeVariableEditorExtended({ propName: 'dataSources', propValue: allDataSources }));
|
||||
|
||||
const variable = getVariable<QueryVariableModel>(identifier.uuid!, getState());
|
||||
const variable = getVariable<QueryVariableModel>(identifier.id!, getState());
|
||||
if (!variable.datasource) {
|
||||
return;
|
||||
}
|
||||
@@ -101,7 +101,7 @@ export const changeQueryVariableQuery = (
|
||||
query: any,
|
||||
definition: string
|
||||
): ThunkResult<void> => async (dispatch, getState) => {
|
||||
const variableInState = getVariable<QueryVariableModel>(identifier.uuid!, getState());
|
||||
const variableInState = getVariable<QueryVariableModel>(identifier.id!, getState());
|
||||
if (typeof query === 'string' && query.match(new RegExp('\\$' + variableInState.name + '(/| |$)'))) {
|
||||
const errorText = 'Query cannot contain a reference to itself. Variable: $' + variableInState.name;
|
||||
dispatch(addVariableEditorError({ errorProp: 'query', errorText }));
|
||||
|
||||
@@ -31,7 +31,7 @@ export const createQueryVariableAdapter = (): VariableAdapter<QueryVariableModel
|
||||
await dispatch(updateQueryVariableOptions(toVariableIdentifier(variable), searchFilter));
|
||||
},
|
||||
getSaveModel: variable => {
|
||||
const { index, uuid, initLock, global, queryValue, ...rest } = cloneDeep(variable);
|
||||
const { index, id, initLock, global, queryValue, ...rest } = cloneDeep(variable);
|
||||
// remove options
|
||||
if (variable.refresh !== VariableRefresh.never) {
|
||||
return { ...rest, options: [] };
|
||||
|
||||
@@ -17,7 +17,7 @@ describe('queryVariableReducer', () => {
|
||||
{ text: 'A', value: 'A', selected: false },
|
||||
{ text: 'B', value: 'B', selected: false },
|
||||
];
|
||||
const payload = toVariablePayload({ uuid: '0', type: 'query' }, options);
|
||||
const payload = toVariablePayload({ id: '0', type: 'query' }, options);
|
||||
reducerTester<VariablesState>()
|
||||
.givenReducer(queryVariableReducer, cloneDeep(initialState))
|
||||
.whenActionIsDispatched(updateVariableOptions(payload))
|
||||
@@ -42,7 +42,7 @@ describe('queryVariableReducer', () => {
|
||||
{ text: 'A', value: 'A', selected: false },
|
||||
{ text: 'B', value: 'B', selected: false },
|
||||
];
|
||||
const payload = toVariablePayload({ uuid: '0', type: 'query' }, options);
|
||||
const payload = toVariablePayload({ id: '0', type: 'query' }, options);
|
||||
reducerTester<VariablesState>()
|
||||
.givenReducer(queryVariableReducer, cloneDeep(initialState))
|
||||
.whenActionIsDispatched(updateVariableOptions(payload))
|
||||
@@ -62,7 +62,7 @@ describe('queryVariableReducer', () => {
|
||||
describe('when updateVariableOptions is dispatched and includeAll is true and payload is an empty array', () => {
|
||||
it('then state should be correct', () => {
|
||||
const { initialState } = getVariableTestContext(adapter, { includeAll: true });
|
||||
const payload = toVariablePayload({ uuid: '0', type: 'query' }, []);
|
||||
const payload = toVariablePayload({ id: '0', type: 'query' }, []);
|
||||
reducerTester<VariablesState>()
|
||||
.givenReducer(queryVariableReducer, cloneDeep(initialState))
|
||||
.whenActionIsDispatched(updateVariableOptions(payload))
|
||||
@@ -79,7 +79,7 @@ describe('queryVariableReducer', () => {
|
||||
describe('when updateVariableOptions is dispatched and includeAll is false and payload is an empty array', () => {
|
||||
it('then state should be correct', () => {
|
||||
const { initialState } = getVariableTestContext(adapter, { includeAll: false });
|
||||
const payload = toVariablePayload({ uuid: '0', type: 'query' }, []);
|
||||
const payload = toVariablePayload({ id: '0', type: 'query' }, []);
|
||||
reducerTester<VariablesState>()
|
||||
.givenReducer(queryVariableReducer, cloneDeep(initialState))
|
||||
.whenActionIsDispatched(updateVariableOptions(payload))
|
||||
@@ -100,7 +100,7 @@ describe('queryVariableReducer', () => {
|
||||
{ text: 'A', value: 'A', selected: false },
|
||||
{ text: 'B', value: 'B', selected: false },
|
||||
];
|
||||
const payload = toVariablePayload({ uuid: '0', type: 'query' }, options);
|
||||
const payload = toVariablePayload({ id: '0', type: 'query' }, options);
|
||||
reducerTester<VariablesState>()
|
||||
.givenReducer(queryVariableReducer, cloneDeep(initialState))
|
||||
.whenActionIsDispatched(updateVariableOptions(payload))
|
||||
@@ -124,7 +124,7 @@ describe('queryVariableReducer', () => {
|
||||
{ text: 'A', value: 'A', selected: false },
|
||||
{ text: 'B', value: 'B', selected: false },
|
||||
];
|
||||
const payload = toVariablePayload({ uuid: '0', type: 'query' }, options);
|
||||
const payload = toVariablePayload({ id: '0', type: 'query' }, options);
|
||||
reducerTester<VariablesState>()
|
||||
.givenReducer(queryVariableReducer, cloneDeep(initialState))
|
||||
.whenActionIsDispatched(updateVariableOptions(payload))
|
||||
@@ -142,7 +142,7 @@ describe('queryVariableReducer', () => {
|
||||
it('then state should be correct', () => {
|
||||
const { initialState } = getVariableTestContext(adapter);
|
||||
const tags: any[] = [{ text: 'A' }, { text: 'B' }];
|
||||
const payload = toVariablePayload({ uuid: '0', type: 'query' }, tags);
|
||||
const payload = toVariablePayload({ id: '0', type: 'query' }, tags);
|
||||
reducerTester<VariablesState>()
|
||||
.givenReducer(queryVariableReducer, cloneDeep(initialState))
|
||||
.whenActionIsDispatched(updateVariableTags(payload))
|
||||
|
||||
@@ -14,8 +14,8 @@ import templateSrv from '../../templating/template_srv';
|
||||
import {
|
||||
ALL_VARIABLE_TEXT,
|
||||
ALL_VARIABLE_VALUE,
|
||||
EMPTY_UUID,
|
||||
getInstanceState,
|
||||
NEW_VARIABLE_ID,
|
||||
NONE_VARIABLE_TEXT,
|
||||
NONE_VARIABLE_VALUE,
|
||||
VariablePayload,
|
||||
@@ -31,7 +31,7 @@ export interface QueryVariableEditorState {
|
||||
}
|
||||
|
||||
export const initialQueryVariableModelState: QueryVariableModel = {
|
||||
uuid: EMPTY_UUID,
|
||||
id: NEW_VARIABLE_ID,
|
||||
global: false,
|
||||
index: -1,
|
||||
type: 'query',
|
||||
@@ -134,7 +134,7 @@ export const queryVariableSlice = createSlice({
|
||||
reducers: {
|
||||
updateVariableOptions: (state: VariablesState, action: PayloadAction<VariablePayload<any[]>>) => {
|
||||
const results = action.payload.data;
|
||||
const instanceState = getInstanceState<QueryVariableModel>(state, action.payload.uuid);
|
||||
const instanceState = getInstanceState<QueryVariableModel>(state, action.payload.id);
|
||||
const { regex, includeAll, sort } = instanceState;
|
||||
const options = metricNamesToVariableValues(regex, sort, results);
|
||||
|
||||
@@ -148,7 +148,7 @@ export const queryVariableSlice = createSlice({
|
||||
instanceState.options = options;
|
||||
},
|
||||
updateVariableTags: (state: VariablesState, action: PayloadAction<VariablePayload<any[]>>) => {
|
||||
const instanceState = getInstanceState<QueryVariableModel>(state, action.payload.uuid);
|
||||
const instanceState = getInstanceState<QueryVariableModel>(state, action.payload.id);
|
||||
const results = action.payload.data;
|
||||
const tags: VariableTag[] = [];
|
||||
for (let i = 0; i < results.length; i++) {
|
||||
|
||||
Reference in New Issue
Block a user