mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
fixed dashboard sorting
This commit is contained in:
parent
770a21b368
commit
83e496606e
@ -40,6 +40,13 @@ export class DashboardModel {
|
|||||||
folderId: number;
|
folderId: number;
|
||||||
panels: PanelModel[];
|
panels: PanelModel[];
|
||||||
|
|
||||||
|
static nonPersistedProperties: {[str: string]: boolean} = {
|
||||||
|
"events": true,
|
||||||
|
"meta": true,
|
||||||
|
"panels": true, // needs special handling
|
||||||
|
"templating": true, // needs special handling
|
||||||
|
};
|
||||||
|
|
||||||
constructor(data, meta?) {
|
constructor(data, meta?) {
|
||||||
if (!data) {
|
if (!data) {
|
||||||
data = {};
|
data = {};
|
||||||
@ -118,30 +125,26 @@ export class DashboardModel {
|
|||||||
|
|
||||||
// cleans meta data and other non peristent state
|
// cleans meta data and other non peristent state
|
||||||
getSaveModelClone() {
|
getSaveModelClone() {
|
||||||
// temp remove stuff
|
|
||||||
var events = this.events;
|
|
||||||
var meta = this.meta;
|
|
||||||
var variables = this.templating.list;
|
|
||||||
var panels = this.panels;
|
|
||||||
|
|
||||||
delete this.events;
|
|
||||||
delete this.meta;
|
|
||||||
delete this.panels;
|
|
||||||
|
|
||||||
// prepare save model
|
|
||||||
this.templating.list = _.map(variables, variable => variable.getSaveModel ? variable.getSaveModel() : variable);
|
|
||||||
this.panels = _.map(panels, panel => panel.getSaveModel());
|
|
||||||
|
|
||||||
// make clone
|
// make clone
|
||||||
var copy = _.cloneDeep(this);
|
var copy: any = {};
|
||||||
// sort clone
|
for (var property in this) {
|
||||||
copy = sortByKeys(copy);
|
if (DashboardModel.nonPersistedProperties[property] || !this.hasOwnProperty(property)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
// restore properties
|
copy[property] = _.cloneDeep(this[property]);
|
||||||
this.events = events;
|
}
|
||||||
this.meta = meta;
|
|
||||||
this.templating.list = variables;
|
// get variable save models
|
||||||
this.panels = panels;
|
copy.templating = {
|
||||||
|
list: _.map(this.templating.list, variable => variable.getSaveModel ? variable.getSaveModel() : variable),
|
||||||
|
};
|
||||||
|
|
||||||
|
// get panel save models
|
||||||
|
copy.panels = _.map(this.panels, panel => panel.getSaveModel());
|
||||||
|
|
||||||
|
// sort by keys
|
||||||
|
copy = sortByKeys(copy);
|
||||||
|
|
||||||
return copy;
|
return copy;
|
||||||
}
|
}
|
||||||
@ -188,7 +191,7 @@ export class DashboardModel {
|
|||||||
addPanel(panel) {
|
addPanel(panel) {
|
||||||
panel.id = this.getNextPanelId();
|
panel.id = this.getNextPanelId();
|
||||||
|
|
||||||
this.panels.push(new PanelModel(panel));
|
this.panels.unshift(new PanelModel(panel));
|
||||||
|
|
||||||
// make sure it's sorted by pos
|
// make sure it's sorted by pos
|
||||||
this.panels.sort(function(panelA, panelB) {
|
this.panels.sort(function(panelA, panelB) {
|
||||||
|
@ -47,8 +47,8 @@ describe('DashboardModel', function() {
|
|||||||
var saveModel = model.getSaveModelClone();
|
var saveModel = model.getSaveModelClone();
|
||||||
var keys = _.keys(saveModel);
|
var keys = _.keys(saveModel);
|
||||||
|
|
||||||
expect(keys[0]).to.be('autoUpdate');
|
expect(keys[0]).to.be('annotations');
|
||||||
expect(keys[1]).to.be('revision');
|
expect(keys[1]).to.be('autoUpdate');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -103,6 +103,7 @@ describe('given dashboard with repeated panels', function() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
dash = new DashboardModel(dash, {});
|
dash = new DashboardModel(dash, {});
|
||||||
|
dash.getSaveModelClone();
|
||||||
var exporter = new DashboardExporter(datasourceSrvStub);
|
var exporter = new DashboardExporter(datasourceSrvStub);
|
||||||
exporter.makeExportable(dash).then(clean => {
|
exporter.makeExportable(dash).then(clean => {
|
||||||
exported = clean;
|
exported = clean;
|
||||||
|
Loading…
Reference in New Issue
Block a user