visualize should wait for visualization to finish initialization (#13742)

* visualize should wait for visualization to finish initialization

* clear timeout on destroy

* fixing based on stacey's review
This commit is contained in:
Peter Pisljar 2017-08-30 08:31:56 +02:00 committed by ppisljar
parent d48d54f9eb
commit d1a8fc22f8
3 changed files with 13 additions and 4 deletions

View file

@ -100,6 +100,12 @@ uiModules
const Visualization = $scope.vis.type.visualization;
const visualization = new Visualization(getVisEl()[0], $scope.vis);
if (visualization.init) {
visualization.init().then(() => { $scope.vis.initialized = true; });
} else {
$scope.vis.initialized = true;
}
const renderFunction = _.debounce(() => {
$scope.vis.size = [$el.width(), $el.height()];
const status = getUpdateStatus($scope);
@ -115,7 +121,7 @@ uiModules
}, 100);
$scope.$on('render', () => {
if (!$scope.vis || ($scope.vis.type.requiresSearch && !$scope.visData)) {
if (!$scope.vis || !$scope.vis.initialized || ($scope.vis.type.requiresSearch && !$scope.visData)) {
return;
}
renderFunction();

View file

@ -8,7 +8,7 @@ import { getUpdateStatus } from 'ui/vis/update_status';
uiModules
.get('kibana/directive', ['ngSanitize'])
.directive('visualizationEditor', function (Private) {
.directive('visualizationEditor', function (Private, $timeout) {
const editorTypes = Private(VisEditorTypesRegistryProvider);
return {
@ -43,6 +43,7 @@ uiModules
editor.destroy();
});
$timeout(() => { renderFunction(); });
}
};
});

View file

@ -53,8 +53,8 @@ uiModules
const responseHandler = getHandler(responseHandlers, $scope.vis.type.responseHandler);
$scope.fetch = _.debounce(function () {
// searchSource is only there for courier request handler
if (!$scope.vis.initialized) return;
// searchSource is only there for courier request handler
requestHandler($scope.vis, $scope.appState, $scope.uiState, queryFilter, $scope.savedObj.searchSource)
.then(requestHandlerResponse => {
@ -151,6 +151,8 @@ uiModules
resizeChecker.destroy();
});
$scope.$watch('vis.initialized', $scope.fetch);
$scope.fetch();
$scope.$root.$broadcast('ready:vis');
}