1import { ComponentType } from 'react'; 2import { 3 BusEventWithPayload, 4 DataQuery, 5 DataSourceJsonData, 6 DataSourceRef, 7 LoadingState, 8 QueryEditorProps, 9 VariableModel as BaseVariableModel, 10 VariableType, 11} from '@grafana/data'; 12 13import { NEW_VARIABLE_ID } from './state/types'; 14import { VariableQueryProps } from '../../types'; 15 16export enum VariableRefresh { 17 never, // removed from the UI 18 onDashboardLoad, 19 onTimeRangeChanged, 20} 21 22export enum VariableHide { 23 dontHide, 24 hideLabel, 25 hideVariable, 26} 27 28export enum VariableSort { 29 disabled, 30 alphabeticalAsc, 31 alphabeticalDesc, 32 numericalAsc, 33 numericalDesc, 34 alphabeticalCaseInsensitiveAsc, 35 alphabeticalCaseInsensitiveDesc, 36} 37 38export interface VariableOption { 39 selected: boolean; 40 text: string | string[]; 41 value: string | string[]; 42 isNone?: boolean; 43} 44 45export interface AdHocVariableFilter { 46 key: string; 47 operator: string; 48 value: string; 49 condition: string; 50} 51 52export interface AdHocVariableModel extends VariableModel { 53 datasource: DataSourceRef | null; 54 filters: AdHocVariableFilter[]; 55} 56 57export interface IntervalVariableModel extends VariableWithOptions { 58 auto: boolean; 59 auto_min: string; 60 auto_count: number; 61 refresh: VariableRefresh; 62} 63 64export interface CustomVariableModel extends VariableWithMultiSupport {} 65 66export interface DataSourceVariableModel extends VariableWithMultiSupport { 67 regex: string; 68 refresh: VariableRefresh; 69} 70 71export interface QueryVariableModel extends DataSourceVariableModel { 72 datasource: DataSourceRef | null; 73 definition: string; 74 sort: VariableSort; 75 queryValue?: string; 76 query: any; 77} 78 79export interface TextBoxVariableModel extends VariableWithOptions { 80 originalQuery: string | null; 81} 82 83export interface ConstantVariableModel extends VariableWithOptions {} 84 85export interface VariableWithMultiSupport extends VariableWithOptions { 86 multi: boolean; 87 includeAll: boolean; 88 allValue?: string | null; 89} 90 91export interface VariableWithOptions extends VariableModel { 92 current: VariableOption; 93 options: VariableOption[]; 94 query: string; 95} 96 97export interface DashboardProps { 98 name: string; 99 uid: string; 100 toString: () => string; 101} 102 103export interface DashboardVariableModel extends SystemVariable<DashboardProps> {} 104 105export interface OrgProps { 106 name: string; 107 id: number; 108 toString: () => string; 109} 110 111export interface OrgVariableModel extends SystemVariable<OrgProps> {} 112 113export interface UserProps { 114 login: string; 115 id: number; 116 email?: string; 117 toString: () => string; 118} 119 120export interface UserVariableModel extends SystemVariable<UserProps> {} 121 122export interface SystemVariable<TProps extends { toString: () => string }> extends VariableModel { 123 current: { value: TProps }; 124} 125 126export interface VariableModel extends BaseVariableModel { 127 id: string; 128 global: boolean; 129 hide: VariableHide; 130 skipUrlSync: boolean; 131 index: number; 132 state: LoadingState; 133 error: any | null; 134 description: string | null; 135} 136 137export const initialVariableModelState: VariableModel = { 138 id: NEW_VARIABLE_ID, 139 name: '', 140 label: null, 141 type: ('' as unknown) as VariableType, 142 global: false, 143 index: -1, 144 hide: VariableHide.dontHide, 145 skipUrlSync: false, 146 state: LoadingState.NotStarted, 147 error: null, 148 description: null, 149}; 150 151export type VariableQueryEditorType< 152 TQuery extends DataQuery = DataQuery, 153 TOptions extends DataSourceJsonData = DataSourceJsonData 154> = ComponentType<VariableQueryProps> | ComponentType<QueryEditorProps<any, TQuery, TOptions, any>> | null; 155 156export interface VariablesChangedEvent { 157 refreshAll: boolean; 158 panelIds: number[]; 159} 160 161export class VariablesChanged extends BusEventWithPayload<VariablesChangedEvent> { 162 static type = 'variables-changed'; 163} 164 165export interface VariablesTimeRangeProcessDoneEvent { 166 variableIds: string[]; 167} 168 169export class VariablesTimeRangeProcessDone extends BusEventWithPayload<VariablesTimeRangeProcessDoneEvent> { 170 static type = 'variables-time-range-process-done'; 171} 172 173export class VariablesChangedInUrl extends BusEventWithPayload<VariablesChangedEvent> { 174 static type = 'variables-changed-in-url'; 175} 176