@@ -8,6 +8,7 @@ var DocumentView = require('../documents/document-list-item');
8
8
var IndexDefinitionView = require ( '../indexes/index-definition' ) ;
9
9
var TreeView = require ( './tree-view' ) ;
10
10
var StageModel = require ( './stage-model' ) ;
11
+ var Action = require ( 'hadron-action' ) ;
11
12
12
13
var electron = require ( 'electron' ) ;
13
14
var shell = electron . shell ;
@@ -225,8 +226,8 @@ module.exports = View.extend({
225
226
} ,
226
227
initialize : function ( ) {
227
228
this . listenTo ( this . model , 'sync' , this . onModelSynced . bind ( this ) ) ;
228
- this . listenTo ( this . parent , 'submit:query' , this . onQueryChanged . bind ( this ) ) ;
229
229
this . on ( 'change:visible' , this . onVisibleChanged . bind ( this ) ) ;
230
+ Action . filterChanged . listen ( this . fetchExplainPlan . bind ( this ) ) ;
230
231
this . showExplainTree = app . isFeatureEnabled ( 'showExplainPlanTab' ) ;
231
232
} ,
232
233
onModelSynced : function ( ) {
@@ -247,63 +248,64 @@ module.exports = View.extend({
247
248
treeButtonClicked : function ( ) {
248
249
this . activeDetailView = 'tree' ;
249
250
} ,
250
- fetchExplainPlan : function ( ) {
251
- var filter = app . queryOptions . query . serialize ( ) ;
251
+ fetchExplainPlan : function ( query ) {
252
+ var filter = query || app . queryOptions . query . serialize ( ) ;
252
253
var options = { } ;
253
254
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 ) ;
254
261
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]' ) ;
273
274
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
+ } ) ;
291
292
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
+ }
296
297
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' ) ;
300
301
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
+ }
307
309
} ,
308
310
onVisibleChanged : function ( ) {
309
311
if ( this . visible ) {
0 commit comments