diff --git a/src/ui/public/vislib/lib/resize_checker.js b/src/ui/public/vislib/lib/resize_checker.js index e0e4e1c062605..9a86ddc1642ea 100644 --- a/src/ui/public/vislib/lib/resize_checker.js +++ b/src/ui/public/vislib/lib/resize_checker.js @@ -182,6 +182,10 @@ export default function ResizeCheckerFactory(Private, Notifier) { }, ms)); }; + ResizeChecker.prototype.stopSchedule = function () { + clearTimeout(this._timerId); + }; + /** * Signal that the ResizeChecker should shutdown. * diff --git a/src/ui/public/vislib/vis.js b/src/ui/public/vislib/vis.js index 5dcbddd87b848..54d02072c7d5a 100644 --- a/src/ui/public/vislib/vis.js +++ b/src/ui/public/vislib/vis.js @@ -65,7 +65,7 @@ export default function VisFactory(Private) { } this.handler = handlerTypes[chartType](this) || handlerTypes.column(this); - this._runOnHandler('render'); + this._runWithoutResizeChecker('render'); }; /** @@ -86,6 +86,14 @@ export default function VisFactory(Private) { } }; + _runWithoutResizeChecker(method) { + this.resizeChecker.stopSchedule(); + this._runOnHandler(method); + this.resizeChecker.saveSize(); + this.resizeChecker.saveDirty(false); + this.resizeChecker.continueSchedule(); + } + _runOnHandler(method) { try { this.handler[method](); diff --git a/src/ui/public/vislib_vis_type/__tests__/_vislib_renderbot.js b/src/ui/public/vislib_vis_type/__tests__/_vislib_renderbot.js index b70e61001a9e4..a07ea0b87a8dd 100644 --- a/src/ui/public/vislib_vis_type/__tests__/_vislib_renderbot.js +++ b/src/ui/public/vislib_vis_type/__tests__/_vislib_renderbot.js @@ -134,10 +134,11 @@ describe('renderbot', function exportWrapper() { let buildStub = sinon.stub(renderbot, 'buildChartData', _.constant(football)); let renderStub = sinon.stub(renderbot.vislibVis, 'render'); - renderbot.render('flat data', persistedState); - expect(renderStub.callCount).to.be(1); - expect(buildStub.callCount).to.be(1); - expect(renderStub.firstCall.args[0]).to.be(football); + return renderbot.render('flat data', persistedState).then(() => { + expect(renderStub.callCount).to.be(1); + expect(buildStub.callCount).to.be(1); + expect(renderStub.firstCall.args[0]).to.be(football); + }); }); }); diff --git a/src/ui/public/vislib_vis_type/vislib_renderbot.js b/src/ui/public/vislib_vis_type/vislib_renderbot.js index 1cbbf1a424c21..8ef87c0ed7f1b 100644 --- a/src/ui/public/vislib_vis_type/vislib_renderbot.js +++ b/src/ui/public/vislib_vis_type/vislib_renderbot.js @@ -46,7 +46,12 @@ module.exports = function VislibRenderbotFactory(Private) { VislibRenderbot.prototype.buildChartData = buildChartData; VislibRenderbot.prototype.render = function (esResponse) { this.chartData = this.buildChartData(esResponse); - this.vislibVis.render(this.chartData, this.uiState); + // to allow legend to render first (wait for angular digest cycle to complete) + return new Promise((resolve, reject) => { + setTimeout(() => { + resolve(this.vislibVis.render(this.chartData, this.uiState)); + }); + }); }; VislibRenderbot.prototype.destroy = function () {