1import { ComponentType } from 'react'; 2import { Reducer } from 'redux'; 3import { Registry, UrlQueryValue, VariableType } from '@grafana/data'; 4 5import { VariableModel, VariableOption } from './types'; 6import { VariableEditorProps } from './editor/types'; 7import { VariablePickerProps } from './pickers/types'; 8import { createQueryVariableAdapter } from './query/adapter'; 9import { createCustomVariableAdapter } from './custom/adapter'; 10import { createTextBoxVariableAdapter } from './textbox/adapter'; 11import { createConstantVariableAdapter } from './constant/adapter'; 12import { createDataSourceVariableAdapter } from './datasource/adapter'; 13import { createIntervalVariableAdapter } from './interval/adapter'; 14import { createAdHocVariableAdapter } from './adhoc/adapter'; 15import { createSystemVariableAdapter } from './system/adapter'; 16import { VariablesState } from './state/types'; 17 18export interface VariableAdapter<Model extends VariableModel> { 19 id: VariableType; 20 description: string; 21 name: string; 22 initialState: Model; 23 dependsOn: (variable: Model, variableToTest: Model) => boolean; 24 setValue: (variable: Model, option: VariableOption, emitChanges?: boolean) => Promise<void>; 25 setValueFromUrl: (variable: Model, urlValue: UrlQueryValue) => Promise<void>; 26 updateOptions: (variable: Model, searchFilter?: string) => Promise<void>; 27 getSaveModel: (variable: Model, saveCurrentAsDefault?: boolean) => Partial<Model>; 28 getValueForUrl: (variable: Model) => string | string[]; 29 picker: ComponentType<VariablePickerProps<Model>>; 30 editor: ComponentType<VariableEditorProps<Model>>; 31 reducer: Reducer<VariablesState>; 32 beforeAdding?: (model: any) => any; 33} 34 35export const getDefaultVariableAdapters = () => [ 36 createQueryVariableAdapter(), 37 createCustomVariableAdapter(), 38 createTextBoxVariableAdapter(), 39 createConstantVariableAdapter(), 40 createDataSourceVariableAdapter(), 41 createIntervalVariableAdapter(), 42 createAdHocVariableAdapter(), 43 createSystemVariableAdapter(), 44]; 45 46export const variableAdapters = new Registry<VariableAdapter<any>>(); 47