From 9a8d0f2c8e34cdc7b4637feed22d3cc4d7e01abf Mon Sep 17 00:00:00 2001 From: ppisljar Date: Tue, 10 Oct 2017 18:40:47 +0200 Subject: [PATCH 1/2] some updates to visualize loader --- src/ui/public/filter_manager/filter_manager.js | 7 ++++++- src/ui/public/vis/vis.js | 3 +++ src/ui/public/visualize/loader.js | 18 +++++++++++++++--- src/ui/public/visualize/visualize.js | 2 +- 4 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/ui/public/filter_manager/filter_manager.js b/src/ui/public/filter_manager/filter_manager.js index 5226956ea5406..b809e5a48f508 100644 --- a/src/ui/public/filter_manager/filter_manager.js +++ b/src/ui/public/filter_manager/filter_manager.js @@ -7,7 +7,7 @@ export function FilterManagerProvider(Private) { const queryFilter = Private(FilterBarQueryFilterProvider); const filterManager = {}; - filterManager.add = function (field, values, operation, index) { + filterManager.generate = (field, values, operation, index) => { values = _.isArray(values) ? values : [values]; const fieldName = _.isObject(field) ? field.name : field; const filters = _.flatten([queryFilter.getAppFilters()]); @@ -68,6 +68,11 @@ export function FilterManagerProvider(Private) { newFilters.push(filter); }); + return newFilters; + }; + + filterManager.add = function (field, values, operation, index) { + const newFilters = this.generate(field, values, operation, index); return queryFilter.addFilters(newFilters); }; diff --git a/src/ui/public/vis/vis.js b/src/ui/public/vis/vis.js index 1ff7edb1faf86..f8e2b4d52db61 100644 --- a/src/ui/public/vis/vis.js +++ b/src/ui/public/vis/vis.js @@ -21,6 +21,7 @@ import { queryManagerFactory } from '../query_manager'; import * as kueryAPI from 'ui/kuery'; import { SearchSourceProvider } from 'ui/courier/data_source/search_source'; import { SavedObjectsClientProvider } from 'ui/saved_objects'; +import { FilterManagerProvider } from 'ui/filter_manager'; export function VisProvider(Private, indexPatterns, timefilter, getAppState) { const visTypes = Private(VisTypesRegistryProvider); @@ -30,6 +31,7 @@ export function VisProvider(Private, indexPatterns, timefilter, getAppState) { const filterBarClickHandler = Private(FilterBarClickHandlerProvider); const SearchSource = Private(SearchSourceProvider); const savedObjectsClient = Private(SavedObjectsClientProvider); + const filterManager = Private(FilterManagerProvider); class Vis extends EventEmitter { constructor(indexPattern, visState, uiState) { @@ -60,6 +62,7 @@ export function VisProvider(Private, indexPatterns, timefilter, getAppState) { SearchSource: SearchSource, indexPatterns: indexPatterns, timeFilter: timefilter, + filterManager: filterManager, queryFilter: queryFilter, queryManager: queryManagerFactory(getAppState), kuery: kueryAPI, diff --git a/src/ui/public/visualize/loader.js b/src/ui/public/visualize/loader.js index 7aa6aca28d0a4..c2ca8c8cf78ca 100644 --- a/src/ui/public/visualize/loader.js +++ b/src/ui/public/visualize/loader.js @@ -9,6 +9,9 @@ export function VisualizeLoaderProvider($compile, $rootScope, savedVisualization scope.timeRange = params.timeRange; scope.showSpyPanel = params.showSpyPanel; scope.editorMode = params.editorMode; + scope.$on('ready:vis', $event => { + $event.stopPropagation(); + }); const container = el instanceof $ ? el : $(el); @@ -17,15 +20,24 @@ export function VisualizeLoaderProvider($compile, $rootScope, savedVisualization 'time-range="timeRange" editor-mode="editorMode" show-spy-panel="showSpyPanel">'); const visHtml = $compile(visEl)(scope); container.html(visHtml); - return visEl; + + const handler = { destroy: scope.$destroy }; + + return new Promise((resolve) => { + visEl.on('renderComplete', () => { + resolve(handler); + }); + }); + }; return { embedVisualizationWithId: async (el, savedVisualizationId, params) => { return new Promise((resolve) => { savedVisualizations.get(savedVisualizationId).then(savedObj => { - const element = renderVis(el, savedObj, params); - resolve(element); + renderVis(el, savedObj, params).then(handler => { + resolve(handler); + }); }); }); }, diff --git a/src/ui/public/visualize/visualize.js b/src/ui/public/visualize/visualize.js index 793f9765486d2..b1d9d1a7dc946 100644 --- a/src/ui/public/visualize/visualize.js +++ b/src/ui/public/visualize/visualize.js @@ -187,7 +187,7 @@ uiModules $scope.$watch('vis.initialized', $scope.fetch); $scope.fetch(); - $scope.$root.$broadcast('ready:vis'); + $scope.$emit('ready:vis'); } }; }); From 7e2d0dc44d9ccf374980952ce1147330c3dd9d81 Mon Sep 17 00:00:00 2001 From: ppisljar Date: Thu, 12 Oct 2017 11:21:03 +0200 Subject: [PATCH 2/2] auto load Private (suggestion by thomas) --- src/ui/public/visualize/loader.js | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/src/ui/public/visualize/loader.js b/src/ui/public/visualize/loader.js index c2ca8c8cf78ca..4deb8ed906667 100644 --- a/src/ui/public/visualize/loader.js +++ b/src/ui/public/visualize/loader.js @@ -1,6 +1,7 @@ import $ from 'jquery'; +import uiRoutes from 'ui/routes'; -export function VisualizeLoaderProvider($compile, $rootScope, savedVisualizations) { +const VisualizeLoaderProvider = ($compile, $rootScope, savedVisualizations) => { const renderVis = (el, savedObj, params) => { const scope = $rootScope.$new(); scope.savedObj = savedObj; @@ -45,4 +46,28 @@ export function VisualizeLoaderProvider($compile, $rootScope, savedVisualization return renderVis(el, savedObj, params); } }; +}; + + +let visualizeLoader = null; +let pendingPromise = null; +let pendingResolve = null; +uiRoutes.addSetupWork(function (Private) { + visualizeLoader = Private(VisualizeLoaderProvider); + if (pendingResolve) { + pendingResolve(visualizeLoader); + } +}); + +async function getVisualizeLoader() { + if (!pendingResolve) { + pendingPromise = new Promise((resolve)=> { + pendingResolve = resolve; + if (visualizeLoader) resolve(visualizeLoader); + }); + } + return pendingPromise; } + + +export { getVisualizeLoader, VisualizeLoaderProvider };