import { ComponentType } from 'react'; import { Reducer } from 'redux'; import { Registry, UrlQueryValue, VariableType } from '@grafana/data'; import { AdHocVariableModel, ConstantVariableModel, CustomVariableModel, DataSourceVariableModel, IntervalVariableModel, QueryVariableModel, TextBoxVariableModel, 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 type VariableModels = | QueryVariableModel | CustomVariableModel | TextBoxVariableModel | ConstantVariableModel | DataSourceVariableModel | IntervalVariableModel | AdHocVariableModel; export type VariableTypeRegistry = Registry>; export const getDefaultVariableAdapters = () => [ createQueryVariableAdapter(), createCustomVariableAdapter(), createTextBoxVariableAdapter(), createConstantVariableAdapter(), createDataSourceVariableAdapter(), createIntervalVariableAdapter(), createAdHocVariableAdapter(), createSystemVariableAdapter(), ]; export const variableAdapters: VariableTypeRegistry = new Registry>();