mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
fix regressions after save modal changes of not storing time and variables per default
Fix problem with adhoc variable filters not handled. Fix problem with saving variables and time per default when saving a dashboard as/first time. Fix updating dashboard model after save with saving time/variables enabled so that next time you save you won't get checkboxes for save time/variables unless any values changed. Tests validating correctness if time/variable values has changed.
This commit is contained in:
@@ -22,10 +22,10 @@ export class DashboardModel {
|
||||
editable: any;
|
||||
graphTooltip: any;
|
||||
time: any;
|
||||
originalTime: any;
|
||||
private originalTime: any;
|
||||
timepicker: any;
|
||||
templating: any;
|
||||
originalTemplating: any;
|
||||
private originalTemplating: any;
|
||||
annotations: any;
|
||||
refresh: any;
|
||||
snapshot: any;
|
||||
@@ -50,6 +50,8 @@ export class DashboardModel {
|
||||
meta: true,
|
||||
panels: true, // needs special handling
|
||||
templating: true, // needs special handling
|
||||
originalTime: true,
|
||||
originalTemplating: true,
|
||||
};
|
||||
|
||||
constructor(data, meta?) {
|
||||
@@ -70,12 +72,8 @@ export class DashboardModel {
|
||||
this.editable = data.editable !== false;
|
||||
this.graphTooltip = data.graphTooltip || 0;
|
||||
this.time = data.time || { from: 'now-6h', to: 'now' };
|
||||
this.originalTime = _.cloneDeep(this.time);
|
||||
this.timepicker = data.timepicker || {};
|
||||
this.templating = this.ensureListExist(data.templating);
|
||||
this.originalTemplating = _.map(this.templating.list, variable => {
|
||||
return { name: variable.name, current: _.clone(variable.current) };
|
||||
});
|
||||
this.annotations = this.ensureListExist(data.annotations);
|
||||
this.refresh = data.refresh;
|
||||
this.snapshot = data.snapshot;
|
||||
@@ -85,6 +83,9 @@ export class DashboardModel {
|
||||
this.gnetId = data.gnetId || null;
|
||||
this.panels = _.map(data.panels || [], panelData => new PanelModel(panelData));
|
||||
|
||||
this.resetOriginalVariables();
|
||||
this.resetOriginalTime();
|
||||
|
||||
this.initMeta(meta);
|
||||
this.updateSchema(data);
|
||||
|
||||
@@ -138,8 +139,8 @@ export class DashboardModel {
|
||||
// cleans meta data and other non persistent state
|
||||
getSaveModelClone(options?) {
|
||||
let defaults = _.defaults(options || {}, {
|
||||
saveVariables: false,
|
||||
saveTimerange: false,
|
||||
saveVariables: true,
|
||||
saveTimerange: true,
|
||||
});
|
||||
|
||||
// make clone
|
||||
@@ -153,15 +154,23 @@ export class DashboardModel {
|
||||
}
|
||||
|
||||
// get variable save models
|
||||
//console.log(this.templating.list);
|
||||
copy.templating = {
|
||||
list: _.map(this.templating.list, variable => (variable.getSaveModel ? variable.getSaveModel() : variable)),
|
||||
};
|
||||
|
||||
if (!defaults.saveVariables && copy.templating.list.length === this.originalTemplating.length) {
|
||||
if (!defaults.saveVariables) {
|
||||
for (let i = 0; i < copy.templating.list.length; i++) {
|
||||
if (copy.templating.list[i].name === this.originalTemplating[i].name) {
|
||||
copy.templating.list[i].current = this.originalTemplating[i].current;
|
||||
let current = copy.templating.list[i];
|
||||
let original = _.find(this.originalTemplating, { name: current.name, type: current.type });
|
||||
|
||||
if (!original) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (current.type === 'adhoc') {
|
||||
copy.templating.list[i].filters = original.filters;
|
||||
} else {
|
||||
copy.templating.list[i].current = original.current;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -785,4 +794,40 @@ export class DashboardModel {
|
||||
let migrator = new DashboardMigrator(this);
|
||||
migrator.updateSchema(old);
|
||||
}
|
||||
|
||||
resetOriginalTime() {
|
||||
this.originalTime = _.cloneDeep(this.time);
|
||||
}
|
||||
|
||||
hasTimeChanged() {
|
||||
return !_.isEqual(this.time, this.originalTime);
|
||||
}
|
||||
|
||||
resetOriginalVariables() {
|
||||
this.originalTemplating = _.map(this.templating.list, variable => {
|
||||
return {
|
||||
name: variable.name,
|
||||
type: variable.type,
|
||||
current: _.cloneDeep(variable.current),
|
||||
filters: _.cloneDeep(variable.filters),
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
hasVariableValuesChanged() {
|
||||
if (this.templating.list.length !== this.originalTemplating.length) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const updated = _.map(this.templating.list, variable => {
|
||||
return {
|
||||
name: variable.name,
|
||||
type: variable.type,
|
||||
current: _.cloneDeep(variable.current),
|
||||
filters: _.cloneDeep(variable.filters),
|
||||
};
|
||||
});
|
||||
|
||||
return !_.isEqual(updated, this.originalTemplating);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user