Dashboards: Add a new variable type called "Switch" (#111366)

* feat: add schema changes for a switch type of dashboard variable

* fix: generated go

* feat: add support for a switch type of dashboard variable

* chore: update `@grafana/scenes` to a canary version

* feat: add variable editor for the switch variable

* fix: remove unnecessary jest config change

* chore: remove commented out code
This commit is contained in:
Levente Balogh
2025-10-09 12:08:55 +00:00
committed by GitHub
parent 779295cfeb
commit 3658b1fce7
33 changed files with 1502 additions and 171 deletions
@@ -454,8 +454,9 @@ export const defaultAction: Partial<Action> = {
* `textbox`: Display a free text input field with an optional default value.
* `custom`: Define the variable options manually using a comma-separated list.
* `system`: Variables defined by Grafana. See: https://grafana.com/docs/grafana/latest/dashboards/variables/add-template-variables/#global-variables
* `switch`: Boolean variables rendered as a switch
*/
export type VariableType = ('query' | 'adhoc' | 'groupby' | 'constant' | 'datasource' | 'interval' | 'textbox' | 'custom' | 'system' | 'snapshot');
export type VariableType = ('query' | 'adhoc' | 'groupby' | 'constant' | 'datasource' | 'interval' | 'textbox' | 'custom' | 'system' | 'snapshot' | 'switch');
/**
* Color mode for a field. You can specify a single color, or select a continuous (gradient) color schemes, based on a value.
@@ -1052,7 +1052,7 @@ export const defaultTimeRangeOption = (): TimeRangeOption => ({
to: "now",
});
export type VariableKind = QueryVariableKind | TextVariableKind | ConstantVariableKind | DatasourceVariableKind | IntervalVariableKind | CustomVariableKind | GroupByVariableKind | AdhocVariableKind;
export type VariableKind = QueryVariableKind | TextVariableKind | ConstantVariableKind | DatasourceVariableKind | IntervalVariableKind | CustomVariableKind | GroupByVariableKind | AdhocVariableKind | SwitchVariableKind;
export const defaultVariableKind = (): VariableKind => (defaultQueryVariableKind());
@@ -1444,6 +1444,36 @@ export const defaultMetricFindValue = (): MetricFindValue => ({
text: "",
});
export interface SwitchVariableKind {
kind: "SwitchVariable";
spec: SwitchVariableSpec;
}
export const defaultSwitchVariableKind = (): SwitchVariableKind => ({
kind: "SwitchVariable",
spec: defaultSwitchVariableSpec(),
});
export interface SwitchVariableSpec {
name: string;
current: string;
enabledValue: string;
disabledValue: string;
label?: string;
hide: VariableHide;
skipUrlSync: boolean;
description?: string;
}
export const defaultSwitchVariableSpec = (): SwitchVariableSpec => ({
name: "",
current: "false",
enabledValue: "true",
disabledValue: "false",
hide: "dontHide",
skipUrlSync: false,
});
export interface Spec {
annotations: AnnotationQueryKind[];
// Configuration of dashboard cursor sync behavior.