@@ -8,6 +8,7 @@ var DocumentView = require('../documents/document-list-item');
88var IndexDefinitionView = require ( '../indexes/index-definition' ) ;
99var TreeView = require ( './tree-view' ) ;
1010var StageModel = require ( './stage-model' ) ;
11+ var Action = require ( 'hadron-action' ) ;
1112
1213var electron = require ( 'electron' ) ;
1314var shell = electron . shell ;
@@ -225,8 +226,8 @@ module.exports = View.extend({
225226 } ,
226227 initialize : function ( ) {
227228 this . listenTo ( this . model , 'sync' , this . onModelSynced . bind ( this ) ) ;
228- this . listenTo ( this . parent , 'submit:query' , this . onQueryChanged . bind ( this ) ) ;
229229 this . on ( 'change:visible' , this . onVisibleChanged . bind ( this ) ) ;
230+ Action . filterChanged . listen ( this . fetchExplainPlan . bind ( this ) ) ;
230231 this . showExplainTree = app . isFeatureEnabled ( 'showExplainPlanTab' ) ;
231232 } ,
232233 onModelSynced : function ( ) {
@@ -247,63 +248,64 @@ module.exports = View.extend({
247248 treeButtonClicked : function ( ) {
248249 this . activeDetailView = 'tree' ;
249250 } ,
250- fetchExplainPlan : function ( ) {
251- var filter = app . queryOptions . query . serialize ( ) ;
251+ fetchExplainPlan : function ( query ) {
252+ var filter = query || app . queryOptions . query . serialize ( ) ;
252253 var options = { } ;
253254 var view = this ;
255+ if ( this . ns ) {
256+ app . dataService . explain ( this . ns , filter , options , function ( err , explain ) {
257+ if ( err ) {
258+ return debug ( 'error' , err ) ;
259+ }
260+ view . explainPlan = new ExplainPlanModel ( explain ) ;
254261
255- app . dataService . explain ( this . ns , filter , options , function ( err , explain ) {
256- if ( err ) {
257- return debug ( 'error' , err ) ;
258- }
259- view . explainPlan = new ExplainPlanModel ( explain ) ;
260-
261- // remove old tree view
262- if ( view . treeSubview ) {
263- view . treeSubview . remove ( ) ;
264- }
265- // render new tree view
266- var stageModel = new StageModel ( view . explainPlan . rawExplainObject . executionStats . executionStages , {
267- parse : true
268- } ) ;
269- view . treeSubview = view . renderSubview ( new TreeView ( {
270- model : stageModel ,
271- parent : view
272- } ) , '[data-hook=tree-subview]' ) ;
262+ // remove old tree view
263+ if ( view . treeSubview ) {
264+ view . treeSubview . remove ( ) ;
265+ }
266+ // render new tree view
267+ var stageModel = new StageModel ( view . explainPlan . rawExplainObject . executionStats . executionStages , {
268+ parse : true
269+ } ) ;
270+ view . treeSubview = view . renderSubview ( new TreeView ( {
271+ model : stageModel ,
272+ parent : view
273+ } ) , '[data-hook=tree-subview]' ) ;
273274
274- // create new document model from raw explain output
275- var rawDocModel = new DocumentModel ( view . explainPlan . rawExplainObject ) ;
276- // remove old view if present
277- if ( view . rawSubview ) {
278- view . rawSubview . remove ( ) ;
279- }
280- // render document model with a DocumentView
281- view . rawSubview = view . renderSubview ( new DocumentView ( {
282- model : rawDocModel ,
283- parent : view
284- } ) , '[data-hook=raw-subview]' ) ;
285- // expand all top-level fields in the explain output
286- var toplevel = 'li.document-list-item > ol > li.document-property.object,' +
287- 'li.document-list-item > ol > li.document-property.array' ;
288- _ . each ( view . queryAll ( toplevel ) , function ( el ) {
289- el . classList . toggle ( 'expanded' ) ;
290- } ) ;
275+ // create new document model from raw explain output
276+ var rawDocModel = new DocumentModel ( view . explainPlan . rawExplainObject ) ;
277+ // remove old view if present
278+ if ( view . rawSubview ) {
279+ view . rawSubview . remove ( ) ;
280+ }
281+ // render document model with a DocumentView
282+ view . rawSubview = view . renderSubview ( new DocumentView ( {
283+ model : rawDocModel ,
284+ parent : view
285+ } ) , '[data-hook=raw-subview]' ) ;
286+ // expand all top-level fields in the explain output
287+ var toplevel = 'li.document-list-item > ol > li.document-property.object,' +
288+ 'li.document-list-item > ol > li.document-property.array' ;
289+ _ . each ( view . queryAll ( toplevel ) , function ( el ) {
290+ el . classList . toggle ( 'expanded' ) ;
291+ } ) ;
291292
292- // remove old index definition view first
293- if ( view . indexDefinitionSubview ) {
294- view . indexDefinitionSubview . remove ( ) ;
295- }
293+ // remove old index definition view first
294+ if ( view . indexDefinitionSubview ) {
295+ view . indexDefinitionSubview . remove ( ) ;
296+ }
296297
297- // find index definition model and create view
298- if ( _ . isString ( view . explainPlan . usedIndex ) && ! this . usedMultipleIndexes ) {
299- var indexModel = view . model . indexes . get ( view . explainPlan . usedIndex , 'name' ) ;
298+ // find index definition model and create view
299+ if ( _ . isString ( view . explainPlan . usedIndex ) && ! this . usedMultipleIndexes ) {
300+ var indexModel = view . model . indexes . get ( view . explainPlan . usedIndex , 'name' ) ;
300301
301- view . indexDefinitionSubview = view . renderSubview ( new IndexDefinitionView ( {
302- model : indexModel ,
303- parent : view
304- } ) , '[data-hook=index-definition-subview]' ) ;
305- }
306- } ) ;
302+ view . indexDefinitionSubview = view . renderSubview ( new IndexDefinitionView ( {
303+ model : indexModel ,
304+ parent : view
305+ } ) , '[data-hook=index-definition-subview]' ) ;
306+ }
307+ } ) ;
308+ }
307309 } ,
308310 onVisibleChanged : function ( ) {
309311 if ( this . visible ) {
0 commit comments