mirror of https://github.com/grafana/grafana
parent
215d59865e
commit
8bb9d92a73
@ -1,192 +0,0 @@ |
||||
import angular from 'angular'; |
||||
import _ from 'lodash'; |
||||
|
||||
import coreModule from 'app/core/core_module'; |
||||
import {DashboardRow} from './row/row_model'; |
||||
|
||||
export class DynamicDashboardSrv { |
||||
iteration: number; |
||||
dashboard: any; |
||||
variables: any; |
||||
|
||||
init(dashboard) { |
||||
this.dashboard = dashboard; |
||||
this.variables = dashboard.templating.list; |
||||
} |
||||
|
||||
process(options?) { |
||||
if (this.dashboard.snapshot || this.variables.length === 0) { |
||||
return; |
||||
} |
||||
|
||||
this.iteration = (this.iteration || new Date().getTime()) + 1; |
||||
|
||||
options = options || {}; |
||||
var cleanUpOnly = options.cleanUpOnly; |
||||
var i, j, row, panel; |
||||
|
||||
if (this.dashboard.rows) { |
||||
// cleanup scopedVars
|
||||
for (i = 0; i < this.dashboard.rows.length; i++) { |
||||
row = this.dashboard.rows[i]; |
||||
delete row.scopedVars; |
||||
|
||||
for (j = 0; j < row.panels.length; j++) { |
||||
delete row.panels[j].scopedVars; |
||||
} |
||||
} |
||||
|
||||
for (i = 0; i < this.dashboard.rows.length; i++) { |
||||
row = this.dashboard.rows[i]; |
||||
|
||||
// handle row repeats
|
||||
if (row.repeat) { |
||||
if (!cleanUpOnly) { |
||||
this.repeatRow(row, i); |
||||
} |
||||
} else if (row.repeatRowId && row.repeatIteration !== this.iteration) { |
||||
// clean up old left overs
|
||||
this.dashboard.removeRow(row, true); |
||||
i = i - 1; |
||||
continue; |
||||
} |
||||
|
||||
// repeat panels
|
||||
for (j = 0; j < row.panels.length; j++) { |
||||
panel = row.panels[j]; |
||||
if (panel.repeat) { |
||||
if (!cleanUpOnly) { |
||||
this.repeatPanel(panel, row); |
||||
} |
||||
} else if (panel.repeatPanelId && panel.repeatIteration !== this.iteration) { |
||||
// clean up old left overs
|
||||
row.panels = _.without(row.panels, panel); |
||||
j = j - 1; |
||||
} |
||||
} |
||||
|
||||
row.panelSpanChanged(); |
||||
} |
||||
} |
||||
} |
||||
|
||||
// returns a new row clone or reuses a clone from previous iteration
|
||||
getRowClone(sourceRow, repeatIndex, sourceRowIndex) { |
||||
if (repeatIndex === 0) { |
||||
return sourceRow; |
||||
} |
||||
|
||||
var i, panel, row, copy; |
||||
var sourceRowId = sourceRowIndex + 1; |
||||
|
||||
// look for row to reuse
|
||||
for (i = 0; i < this.dashboard.rows.length; i++) { |
||||
row = this.dashboard.rows[i]; |
||||
if (row.repeatRowId === sourceRowId && row.repeatIteration !== this.iteration) { |
||||
copy = row; |
||||
copy.copyPropertiesFromRowSource(sourceRow); |
||||
break; |
||||
} |
||||
} |
||||
|
||||
if (!copy) { |
||||
var modelCopy = angular.copy(sourceRow.getSaveModel()); |
||||
copy = new DashboardRow(modelCopy); |
||||
this.dashboard.rows.splice(sourceRowIndex + repeatIndex, 0, copy); |
||||
|
||||
// set new panel ids
|
||||
for (i = 0; i < copy.panels.length; i++) { |
||||
panel = copy.panels[i]; |
||||
panel.id = this.dashboard.getNextPanelId(); |
||||
} |
||||
} |
||||
|
||||
copy.repeat = null; |
||||
copy.repeatRowId = sourceRowId; |
||||
copy.repeatIteration = this.iteration; |
||||
return copy; |
||||
} |
||||
|
||||
// returns a new row clone or reuses a clone from previous iteration
|
||||
repeatRow(row, rowIndex) { |
||||
var variable = _.find(this.variables, {name: row.repeat}); |
||||
if (!variable) { |
||||
return; |
||||
} |
||||
|
||||
var selected, copy, i, panel; |
||||
if (variable.current.text === 'All') { |
||||
selected = variable.options.slice(1, variable.options.length); |
||||
} else { |
||||
selected = _.filter(variable.options, {selected: true}); |
||||
} |
||||
|
||||
_.each(selected, (option, index) => { |
||||
copy = this.getRowClone(row, index, rowIndex); |
||||
copy.scopedVars = {}; |
||||
copy.scopedVars[variable.name] = option; |
||||
|
||||
for (i = 0; i < copy.panels.length; i++) { |
||||
panel = copy.panels[i]; |
||||
panel.scopedVars = {}; |
||||
panel.scopedVars[variable.name] = option; |
||||
} |
||||
}); |
||||
} |
||||
|
||||
getPanelClone(sourcePanel, row, index) { |
||||
// if first clone return source
|
||||
if (index === 0) { |
||||
return sourcePanel; |
||||
} |
||||
|
||||
var i, tmpId, panel, clone; |
||||
|
||||
// first try finding an existing clone to use
|
||||
for (i = 0; i < row.panels.length; i++) { |
||||
panel = row.panels[i]; |
||||
if (panel.repeatIteration !== this.iteration && panel.repeatPanelId === sourcePanel.id) { |
||||
clone = panel; |
||||
break; |
||||
} |
||||
} |
||||
|
||||
if (!clone) { |
||||
clone = { id: this.dashboard.getNextPanelId() }; |
||||
row.panels.push(clone); |
||||
} |
||||
|
||||
// save id
|
||||
tmpId = clone.id; |
||||
// copy properties from source
|
||||
angular.copy(sourcePanel, clone); |
||||
// restore id
|
||||
clone.id = tmpId; |
||||
clone.repeatIteration = this.iteration; |
||||
clone.repeatPanelId = sourcePanel.id; |
||||
clone.repeat = null; |
||||
return clone; |
||||
} |
||||
|
||||
repeatPanel(panel, row) { |
||||
var variable = _.find(this.variables, {name: panel.repeat}); |
||||
if (!variable) { return; } |
||||
|
||||
var selected; |
||||
if (variable.current.text === 'All') { |
||||
selected = variable.options.slice(1, variable.options.length); |
||||
} else { |
||||
selected = _.filter(variable.options, {selected: true}); |
||||
} |
||||
|
||||
_.each(selected, (option, index) => { |
||||
var copy = this.getPanelClone(panel, row, index); |
||||
copy.span = Math.max(12 / selected.length, panel.minSpan || 4); |
||||
copy.scopedVars = copy.scopedVars || {}; |
||||
copy.scopedVars[variable.name] = option; |
||||
}); |
||||
} |
||||
} |
||||
|
||||
coreModule.service('dynamicDashboardSrv', DynamicDashboardSrv); |
||||
|
@ -1,287 +1,287 @@ |
||||
import {describe, beforeEach, it, expect, angularMocks} from 'test/lib/common'; |
||||
|
||||
import '../dashboard_srv'; |
||||
import {DynamicDashboardSrv} from '../dynamic_dashboard_srv'; |
||||
|
||||
function dynamicDashScenario(desc, func) { |
||||
|
||||
describe.skip(desc, function() { |
||||
var ctx: any = {}; |
||||
|
||||
ctx.setup = function (setupFunc) { |
||||
|
||||
beforeEach(angularMocks.module('grafana.core')); |
||||
beforeEach(angularMocks.module('grafana.services')); |
||||
beforeEach(angularMocks.module(function($provide) { |
||||
$provide.value('contextSrv', { |
||||
user: { timezone: 'utc'} |
||||
}); |
||||
})); |
||||
|
||||
beforeEach(angularMocks.inject(function(dashboardSrv) { |
||||
ctx.dashboardSrv = dashboardSrv; |
||||
|
||||
var model = { |
||||
rows: [], |
||||
templating: { list: [] } |
||||
}; |
||||
|
||||
setupFunc(model); |
||||
ctx.dash = ctx.dashboardSrv.create(model); |
||||
ctx.dynamicDashboardSrv = new DynamicDashboardSrv(); |
||||
ctx.dynamicDashboardSrv.init(ctx.dash); |
||||
ctx.dynamicDashboardSrv.process(); |
||||
ctx.rows = ctx.dash.rows; |
||||
})); |
||||
}; |
||||
|
||||
func(ctx); |
||||
}); |
||||
} |
||||
|
||||
dynamicDashScenario('given dashboard with panel repeat', function(ctx) { |
||||
ctx.setup(function(dash) { |
||||
dash.rows.push({ |
||||
panels: [{id: 2, repeat: 'apps'}] |
||||
}); |
||||
dash.templating.list.push({ |
||||
name: 'apps', |
||||
current: { |
||||
text: 'se1, se2, se3', |
||||
value: ['se1', 'se2', 'se3'] |
||||
}, |
||||
options: [ |
||||
{text: 'se1', value: 'se1', selected: true}, |
||||
{text: 'se2', value: 'se2', selected: true}, |
||||
{text: 'se3', value: 'se3', selected: true}, |
||||
{text: 'se4', value: 'se4', selected: false} |
||||
] |
||||
}); |
||||
}); |
||||
|
||||
it('should repeat panel one time', function() { |
||||
expect(ctx.rows[0].panels.length).to.be(3); |
||||
}); |
||||
|
||||
it('should mark panel repeated', function() { |
||||
expect(ctx.rows[0].panels[0].repeat).to.be('apps'); |
||||
expect(ctx.rows[0].panels[1].repeatPanelId).to.be(2); |
||||
}); |
||||
|
||||
it('should set scopedVars on panels', function() { |
||||
expect(ctx.rows[0].panels[0].scopedVars.apps.value).to.be('se1'); |
||||
expect(ctx.rows[0].panels[1].scopedVars.apps.value).to.be('se2'); |
||||
expect(ctx.rows[0].panels[2].scopedVars.apps.value).to.be('se3'); |
||||
}); |
||||
|
||||
describe('After a second iteration', function() { |
||||
var repeatedPanelAfterIteration1; |
||||
|
||||
beforeEach(function() { |
||||
repeatedPanelAfterIteration1 = ctx.rows[0].panels[1]; |
||||
ctx.rows[0].panels[0].fill = 10; |
||||
ctx.dynamicDashboardSrv.process(); |
||||
}); |
||||
|
||||
it('should have reused same panel instances', function() { |
||||
expect(ctx.rows[0].panels[1]).to.be(repeatedPanelAfterIteration1); |
||||
}); |
||||
|
||||
it('reused panel should copy properties from source', function() { |
||||
expect(ctx.rows[0].panels[1].fill).to.be(10); |
||||
}); |
||||
|
||||
it('should have same panel count', function() { |
||||
expect(ctx.rows[0].panels.length).to.be(3); |
||||
}); |
||||
}); |
||||
|
||||
describe('After a second iteration with different variable', function() { |
||||
beforeEach(function() { |
||||
ctx.dash.templating.list.push({ |
||||
name: 'server', |
||||
current: { text: 'se1, se2, se3', value: ['se1']}, |
||||
options: [{text: 'se1', value: 'se1', selected: true}] |
||||
}); |
||||
ctx.rows[0].panels[0].repeat = "server"; |
||||
ctx.dynamicDashboardSrv.process(); |
||||
}); |
||||
|
||||
it('should remove scopedVars value for last variable', function() { |
||||
expect(ctx.rows[0].panels[0].scopedVars.apps).to.be(undefined); |
||||
}); |
||||
|
||||
it('should have new variable value in scopedVars', function() { |
||||
expect(ctx.rows[0].panels[0].scopedVars.server.value).to.be("se1"); |
||||
}); |
||||
}); |
||||
|
||||
describe('After a second iteration and selected values reduced', function() { |
||||
beforeEach(function() { |
||||
ctx.dash.templating.list[0].options[1].selected = false; |
||||
ctx.dynamicDashboardSrv.process(); |
||||
}); |
||||
|
||||
it('should clean up repeated panel', function() { |
||||
expect(ctx.rows[0].panels.length).to.be(2); |
||||
}); |
||||
}); |
||||
|
||||
describe('After a second iteration and panel repeat is turned off', function() { |
||||
beforeEach(function() { |
||||
ctx.rows[0].panels[0].repeat = null; |
||||
ctx.dynamicDashboardSrv.process(); |
||||
}); |
||||
|
||||
it('should clean up repeated panel', function() { |
||||
expect(ctx.rows[0].panels.length).to.be(1); |
||||
}); |
||||
|
||||
it('should remove scoped vars from reused panel', function() { |
||||
expect(ctx.rows[0].panels[0].scopedVars).to.be(undefined); |
||||
}); |
||||
}); |
||||
|
||||
}); |
||||
|
||||
dynamicDashScenario('given dashboard with row repeat', function(ctx) { |
||||
ctx.setup(function(dash) { |
||||
dash.rows.push({ |
||||
repeat: 'servers', |
||||
panels: [{id: 2}] |
||||
}); |
||||
dash.rows.push({panels: []}); |
||||
dash.templating.list.push({ |
||||
name: 'servers', |
||||
current: { |
||||
text: 'se1, se2', |
||||
value: ['se1', 'se2'] |
||||
}, |
||||
options: [ |
||||
{text: 'se1', value: 'se1', selected: true}, |
||||
{text: 'se2', value: 'se2', selected: true}, |
||||
] |
||||
}); |
||||
}); |
||||
|
||||
it('should repeat row one time', function() { |
||||
expect(ctx.rows.length).to.be(3); |
||||
}); |
||||
|
||||
it('should keep panel ids on first row', function() { |
||||
expect(ctx.rows[0].panels[0].id).to.be(2); |
||||
}); |
||||
|
||||
it('should keep first row as repeat', function() { |
||||
expect(ctx.rows[0].repeat).to.be('servers'); |
||||
}); |
||||
|
||||
it('should clear repeat field on repeated row', function() { |
||||
expect(ctx.rows[1].repeat).to.be(null); |
||||
}); |
||||
|
||||
it('should add scopedVars to rows', function() { |
||||
expect(ctx.rows[0].scopedVars.servers.value).to.be('se1'); |
||||
expect(ctx.rows[1].scopedVars.servers.value).to.be('se2'); |
||||
}); |
||||
|
||||
it('should generate a repeartRowId based on repeat row index', function() { |
||||
expect(ctx.rows[1].repeatRowId).to.be(1); |
||||
expect(ctx.rows[1].repeatIteration).to.be(ctx.dynamicDashboardSrv.iteration); |
||||
}); |
||||
|
||||
it('should set scopedVars on row panels', function() { |
||||
expect(ctx.rows[0].panels[0].scopedVars.servers.value).to.be('se1'); |
||||
expect(ctx.rows[1].panels[0].scopedVars.servers.value).to.be('se2'); |
||||
}); |
||||
|
||||
describe('After a second iteration', function() { |
||||
var repeatedRowAfterFirstIteration; |
||||
|
||||
beforeEach(function() { |
||||
repeatedRowAfterFirstIteration = ctx.rows[1]; |
||||
ctx.rows[0].height = 500; |
||||
ctx.dynamicDashboardSrv.process(); |
||||
}); |
||||
|
||||
it('should still only have 2 rows', function() { |
||||
expect(ctx.rows.length).to.be(3); |
||||
}); |
||||
|
||||
it.skip('should have updated props from source', function() { |
||||
expect(ctx.rows[1].height).to.be(500); |
||||
}); |
||||
|
||||
it('should reuse row instance', function() { |
||||
expect(ctx.rows[1]).to.be(repeatedRowAfterFirstIteration); |
||||
}); |
||||
}); |
||||
|
||||
describe('After a second iteration and selected values reduced', function() { |
||||
beforeEach(function() { |
||||
ctx.dash.templating.list[0].options[1].selected = false; |
||||
ctx.dynamicDashboardSrv.process(); |
||||
}); |
||||
|
||||
it('should remove repeated second row', function() { |
||||
expect(ctx.rows.length).to.be(2); |
||||
}); |
||||
}); |
||||
}); |
||||
|
||||
dynamicDashScenario('given dashboard with row repeat and panel repeat', function(ctx) { |
||||
ctx.setup(function(dash) { |
||||
dash.rows.push({ |
||||
repeat: 'servers', |
||||
panels: [{id: 2, repeat: 'metric'}] |
||||
}); |
||||
dash.templating.list.push({ |
||||
name: 'servers', |
||||
current: { text: 'se1, se2', value: ['se1', 'se2'] }, |
||||
options: [ |
||||
{text: 'se1', value: 'se1', selected: true}, |
||||
{text: 'se2', value: 'se2', selected: true}, |
||||
] |
||||
}); |
||||
dash.templating.list.push({ |
||||
name: 'metric', |
||||
current: { text: 'm1, m2', value: ['m1', 'm2'] }, |
||||
options: [ |
||||
{text: 'm1', value: 'm1', selected: true}, |
||||
{text: 'm2', value: 'm2', selected: true}, |
||||
] |
||||
}); |
||||
}); |
||||
|
||||
it('should repeat row one time', function() { |
||||
expect(ctx.rows.length).to.be(2); |
||||
}); |
||||
|
||||
it('should repeat panel on both rows', function() { |
||||
expect(ctx.rows[0].panels.length).to.be(2); |
||||
expect(ctx.rows[1].panels.length).to.be(2); |
||||
}); |
||||
|
||||
it('should keep panel ids on first row', function() { |
||||
expect(ctx.rows[0].panels[0].id).to.be(2); |
||||
}); |
||||
|
||||
it('should mark second row as repeated', function() { |
||||
expect(ctx.rows[0].repeat).to.be('servers'); |
||||
}); |
||||
|
||||
it('should clear repeat field on repeated row', function() { |
||||
expect(ctx.rows[1].repeat).to.be(null); |
||||
}); |
||||
|
||||
it('should generate a repeartRowId based on repeat row index', function() { |
||||
expect(ctx.rows[1].repeatRowId).to.be(1); |
||||
}); |
||||
|
||||
it('should set scopedVars on row panels', function() { |
||||
expect(ctx.rows[0].panels[0].scopedVars.servers.value).to.be('se1'); |
||||
expect(ctx.rows[1].panels[0].scopedVars.servers.value).to.be('se2'); |
||||
}); |
||||
|
||||
}); |
||||
// import {describe, beforeEach, it, expect, angularMocks} from 'test/lib/common';
|
||||
//
|
||||
// import '../dashboard_srv';
|
||||
// import {DynamicDashboardSrv} from '../dynamic_dashboard_srv';
|
||||
//
|
||||
// function dynamicDashScenario(desc, func) {
|
||||
//
|
||||
// describe.skip(desc, function() {
|
||||
// var ctx: any = {};
|
||||
//
|
||||
// ctx.setup = function (setupFunc) {
|
||||
//
|
||||
// beforeEach(angularMocks.module('grafana.core'));
|
||||
// beforeEach(angularMocks.module('grafana.services'));
|
||||
// beforeEach(angularMocks.module(function($provide) {
|
||||
// $provide.value('contextSrv', {
|
||||
// user: { timezone: 'utc'}
|
||||
// });
|
||||
// }));
|
||||
//
|
||||
// beforeEach(angularMocks.inject(function(dashboardSrv) {
|
||||
// ctx.dashboardSrv = dashboardSrv;
|
||||
//
|
||||
// var model = {
|
||||
// rows: [],
|
||||
// templating: { list: [] }
|
||||
// };
|
||||
//
|
||||
// setupFunc(model);
|
||||
// ctx.dash = ctx.dashboardSrv.create(model);
|
||||
// ctx.dynamicDashboardSrv = new DynamicDashboardSrv();
|
||||
// ctx.dynamicDashboardSrv.init(ctx.dash);
|
||||
// ctx.dynamicDashboardSrv.process();
|
||||
// ctx.rows = ctx.dash.rows;
|
||||
// }));
|
||||
// };
|
||||
//
|
||||
// func(ctx);
|
||||
// });
|
||||
// }
|
||||
//
|
||||
// dynamicDashScenario('given dashboard with panel repeat', function(ctx) {
|
||||
// ctx.setup(function(dash) {
|
||||
// dash.rows.push({
|
||||
// panels: [{id: 2, repeat: 'apps'}]
|
||||
// });
|
||||
// dash.templating.list.push({
|
||||
// name: 'apps',
|
||||
// current: {
|
||||
// text: 'se1, se2, se3',
|
||||
// value: ['se1', 'se2', 'se3']
|
||||
// },
|
||||
// options: [
|
||||
// {text: 'se1', value: 'se1', selected: true},
|
||||
// {text: 'se2', value: 'se2', selected: true},
|
||||
// {text: 'se3', value: 'se3', selected: true},
|
||||
// {text: 'se4', value: 'se4', selected: false}
|
||||
// ]
|
||||
// });
|
||||
// });
|
||||
//
|
||||
// it('should repeat panel one time', function() {
|
||||
// expect(ctx.rows[0].panels.length).to.be(3);
|
||||
// });
|
||||
//
|
||||
// it('should mark panel repeated', function() {
|
||||
// expect(ctx.rows[0].panels[0].repeat).to.be('apps');
|
||||
// expect(ctx.rows[0].panels[1].repeatPanelId).to.be(2);
|
||||
// });
|
||||
//
|
||||
// it('should set scopedVars on panels', function() {
|
||||
// expect(ctx.rows[0].panels[0].scopedVars.apps.value).to.be('se1');
|
||||
// expect(ctx.rows[0].panels[1].scopedVars.apps.value).to.be('se2');
|
||||
// expect(ctx.rows[0].panels[2].scopedVars.apps.value).to.be('se3');
|
||||
// });
|
||||
//
|
||||
// describe('After a second iteration', function() {
|
||||
// var repeatedPanelAfterIteration1;
|
||||
//
|
||||
// beforeEach(function() {
|
||||
// repeatedPanelAfterIteration1 = ctx.rows[0].panels[1];
|
||||
// ctx.rows[0].panels[0].fill = 10;
|
||||
// ctx.dynamicDashboardSrv.process();
|
||||
// });
|
||||
//
|
||||
// it('should have reused same panel instances', function() {
|
||||
// expect(ctx.rows[0].panels[1]).to.be(repeatedPanelAfterIteration1);
|
||||
// });
|
||||
//
|
||||
// it('reused panel should copy properties from source', function() {
|
||||
// expect(ctx.rows[0].panels[1].fill).to.be(10);
|
||||
// });
|
||||
//
|
||||
// it('should have same panel count', function() {
|
||||
// expect(ctx.rows[0].panels.length).to.be(3);
|
||||
// });
|
||||
// });
|
||||
//
|
||||
// describe('After a second iteration with different variable', function() {
|
||||
// beforeEach(function() {
|
||||
// ctx.dash.templating.list.push({
|
||||
// name: 'server',
|
||||
// current: { text: 'se1, se2, se3', value: ['se1']},
|
||||
// options: [{text: 'se1', value: 'se1', selected: true}]
|
||||
// });
|
||||
// ctx.rows[0].panels[0].repeat = "server";
|
||||
// ctx.dynamicDashboardSrv.process();
|
||||
// });
|
||||
//
|
||||
// it('should remove scopedVars value for last variable', function() {
|
||||
// expect(ctx.rows[0].panels[0].scopedVars.apps).to.be(undefined);
|
||||
// });
|
||||
//
|
||||
// it('should have new variable value in scopedVars', function() {
|
||||
// expect(ctx.rows[0].panels[0].scopedVars.server.value).to.be("se1");
|
||||
// });
|
||||
// });
|
||||
//
|
||||
// describe('After a second iteration and selected values reduced', function() {
|
||||
// beforeEach(function() {
|
||||
// ctx.dash.templating.list[0].options[1].selected = false;
|
||||
// ctx.dynamicDashboardSrv.process();
|
||||
// });
|
||||
//
|
||||
// it('should clean up repeated panel', function() {
|
||||
// expect(ctx.rows[0].panels.length).to.be(2);
|
||||
// });
|
||||
// });
|
||||
//
|
||||
// describe('After a second iteration and panel repeat is turned off', function() {
|
||||
// beforeEach(function() {
|
||||
// ctx.rows[0].panels[0].repeat = null;
|
||||
// ctx.dynamicDashboardSrv.process();
|
||||
// });
|
||||
//
|
||||
// it('should clean up repeated panel', function() {
|
||||
// expect(ctx.rows[0].panels.length).to.be(1);
|
||||
// });
|
||||
//
|
||||
// it('should remove scoped vars from reused panel', function() {
|
||||
// expect(ctx.rows[0].panels[0].scopedVars).to.be(undefined);
|
||||
// });
|
||||
// });
|
||||
//
|
||||
// });
|
||||
//
|
||||
// dynamicDashScenario('given dashboard with row repeat', function(ctx) {
|
||||
// ctx.setup(function(dash) {
|
||||
// dash.rows.push({
|
||||
// repeat: 'servers',
|
||||
// panels: [{id: 2}]
|
||||
// });
|
||||
// dash.rows.push({panels: []});
|
||||
// dash.templating.list.push({
|
||||
// name: 'servers',
|
||||
// current: {
|
||||
// text: 'se1, se2',
|
||||
// value: ['se1', 'se2']
|
||||
// },
|
||||
// options: [
|
||||
// {text: 'se1', value: 'se1', selected: true},
|
||||
// {text: 'se2', value: 'se2', selected: true},
|
||||
// ]
|
||||
// });
|
||||
// });
|
||||
//
|
||||
// it('should repeat row one time', function() {
|
||||
// expect(ctx.rows.length).to.be(3);
|
||||
// });
|
||||
//
|
||||
// it('should keep panel ids on first row', function() {
|
||||
// expect(ctx.rows[0].panels[0].id).to.be(2);
|
||||
// });
|
||||
//
|
||||
// it('should keep first row as repeat', function() {
|
||||
// expect(ctx.rows[0].repeat).to.be('servers');
|
||||
// });
|
||||
//
|
||||
// it('should clear repeat field on repeated row', function() {
|
||||
// expect(ctx.rows[1].repeat).to.be(null);
|
||||
// });
|
||||
//
|
||||
// it('should add scopedVars to rows', function() {
|
||||
// expect(ctx.rows[0].scopedVars.servers.value).to.be('se1');
|
||||
// expect(ctx.rows[1].scopedVars.servers.value).to.be('se2');
|
||||
// });
|
||||
//
|
||||
// it('should generate a repeartRowId based on repeat row index', function() {
|
||||
// expect(ctx.rows[1].repeatRowId).to.be(1);
|
||||
// expect(ctx.rows[1].repeatIteration).to.be(ctx.dynamicDashboardSrv.iteration);
|
||||
// });
|
||||
//
|
||||
// it('should set scopedVars on row panels', function() {
|
||||
// expect(ctx.rows[0].panels[0].scopedVars.servers.value).to.be('se1');
|
||||
// expect(ctx.rows[1].panels[0].scopedVars.servers.value).to.be('se2');
|
||||
// });
|
||||
//
|
||||
// describe('After a second iteration', function() {
|
||||
// var repeatedRowAfterFirstIteration;
|
||||
//
|
||||
// beforeEach(function() {
|
||||
// repeatedRowAfterFirstIteration = ctx.rows[1];
|
||||
// ctx.rows[0].height = 500;
|
||||
// ctx.dynamicDashboardSrv.process();
|
||||
// });
|
||||
//
|
||||
// it('should still only have 2 rows', function() {
|
||||
// expect(ctx.rows.length).to.be(3);
|
||||
// });
|
||||
//
|
||||
// it.skip('should have updated props from source', function() {
|
||||
// expect(ctx.rows[1].height).to.be(500);
|
||||
// });
|
||||
//
|
||||
// it('should reuse row instance', function() {
|
||||
// expect(ctx.rows[1]).to.be(repeatedRowAfterFirstIteration);
|
||||
// });
|
||||
// });
|
||||
//
|
||||
// describe('After a second iteration and selected values reduced', function() {
|
||||
// beforeEach(function() {
|
||||
// ctx.dash.templating.list[0].options[1].selected = false;
|
||||
// ctx.dynamicDashboardSrv.process();
|
||||
// });
|
||||
//
|
||||
// it('should remove repeated second row', function() {
|
||||
// expect(ctx.rows.length).to.be(2);
|
||||
// });
|
||||
// });
|
||||
// });
|
||||
//
|
||||
// dynamicDashScenario('given dashboard with row repeat and panel repeat', function(ctx) {
|
||||
// ctx.setup(function(dash) {
|
||||
// dash.rows.push({
|
||||
// repeat: 'servers',
|
||||
// panels: [{id: 2, repeat: 'metric'}]
|
||||
// });
|
||||
// dash.templating.list.push({
|
||||
// name: 'servers',
|
||||
// current: { text: 'se1, se2', value: ['se1', 'se2'] },
|
||||
// options: [
|
||||
// {text: 'se1', value: 'se1', selected: true},
|
||||
// {text: 'se2', value: 'se2', selected: true},
|
||||
// ]
|
||||
// });
|
||||
// dash.templating.list.push({
|
||||
// name: 'metric',
|
||||
// current: { text: 'm1, m2', value: ['m1', 'm2'] },
|
||||
// options: [
|
||||
// {text: 'm1', value: 'm1', selected: true},
|
||||
// {text: 'm2', value: 'm2', selected: true},
|
||||
// ]
|
||||
// });
|
||||
// });
|
||||
//
|
||||
// it('should repeat row one time', function() {
|
||||
// expect(ctx.rows.length).to.be(2);
|
||||
// });
|
||||
//
|
||||
// it('should repeat panel on both rows', function() {
|
||||
// expect(ctx.rows[0].panels.length).to.be(2);
|
||||
// expect(ctx.rows[1].panels.length).to.be(2);
|
||||
// });
|
||||
//
|
||||
// it('should keep panel ids on first row', function() {
|
||||
// expect(ctx.rows[0].panels[0].id).to.be(2);
|
||||
// });
|
||||
//
|
||||
// it('should mark second row as repeated', function() {
|
||||
// expect(ctx.rows[0].repeat).to.be('servers');
|
||||
// });
|
||||
//
|
||||
// it('should clear repeat field on repeated row', function() {
|
||||
// expect(ctx.rows[1].repeat).to.be(null);
|
||||
// });
|
||||
//
|
||||
// it('should generate a repeartRowId based on repeat row index', function() {
|
||||
// expect(ctx.rows[1].repeatRowId).to.be(1);
|
||||
// });
|
||||
//
|
||||
// it('should set scopedVars on row panels', function() {
|
||||
// expect(ctx.rows[0].panels[0].scopedVars.servers.value).to.be('se1');
|
||||
// expect(ctx.rows[1].panels[0].scopedVars.servers.value).to.be('se2');
|
||||
// });
|
||||
//
|
||||
// });
|
||||
|
||||
|
Loading…
Reference in new issue