import { ComponentType } from 'react'; import { Reducer } from 'redux'; import { Registry, UrlQueryValue, VariableType } from '@grafana/data'; import { VariableModel, VariableOption } from './types'; import { VariableEditorProps } from './editor/types'; import { VariablesState } from './state/variablesReducer'; import { VariablePickerProps } from './pickers/types'; import { createQueryVariableAdapter } from './query/adapter'; import { createCustomVariableAdapter } from './custom/adapter'; import { createTextBoxVariableAdapter } from './textbox/adapter'; import { createConstantVariableAdapter } from './constant/adapter'; import { createDataSourceVariableAdapter } from './datasource/adapter'; import { createIntervalVariableAdapter } from './interval/adapter'; import { createAdHocVariableAdapter } from './adhoc/adapter'; import { createSystemVariableAdapter } from './system/adapter'; export interface VariableAdapter { id: VariableType; description: string; name: string; initialState: Model; dependsOn: (variable: Model, variableToTest: Model) => boolean; setValue: (variable: Model, option: VariableOption, emitChanges?: boolean) => Promise; setValueFromUrl: (variable: Model, urlValue: UrlQueryValue) => Promise; updateOptions: (variable: Model, searchFilter?: string) => Promise; getSaveModel: (variable: Model, saveCurrentAsDefault?: boolean) => Partial; getValueForUrl: (variable: Model) => string | string[]; picker: ComponentType>; editor: ComponentType>; reducer: Reducer; beforeAdding?: (model: any) => any; } export const getDefaultVariableAdapters = () => [ createQueryVariableAdapter(), createCustomVariableAdapter(), createTextBoxVariableAdapter(), createConstantVariableAdapter(), createDataSourceVariableAdapter(), createIntervalVariableAdapter(), createAdHocVariableAdapter(), createSystemVariableAdapter(), ]; export const variableAdapters = new Registry>();