diff --git a/src/internal-packages/explain/lib/components/compass-explain.jsx b/src/internal-packages/explain/lib/components/compass-explain.jsx index 6de1246558d..b3acecf2fe1 100644 --- a/src/internal-packages/explain/lib/components/compass-explain.jsx +++ b/src/internal-packages/explain/lib/components/compass-explain.jsx @@ -3,8 +3,6 @@ const app = require('ampersand-app'); const ExplainBody = require('./explain-body'); const ExplainHeader = require('./explain-header'); -const ExplainActions = require('../actions'); - // const debug = require('debug')('mongodb-compass:explain'); /** @@ -30,7 +28,6 @@ class CompassExplain extends React.Component { } componentWillMount() { - ExplainActions.fetchExplainPlan(); this.queryBar = app.appRegistry.getComponent('Query.QueryBar'); } diff --git a/src/internal-packages/explain/lib/stores/index.js b/src/internal-packages/explain/lib/stores/index.js index 0a25679852a..8cb29b40940 100644 --- a/src/internal-packages/explain/lib/stores/index.js +++ b/src/internal-packages/explain/lib/stores/index.js @@ -36,7 +36,6 @@ const CompassExplainStore = Reflux.createStore({ if (ns && toNS(ns).collection) { this.query = {}; this._reset(); - this.fetchExplainPlan(); } }); @@ -54,9 +53,14 @@ const CompassExplainStore = Reflux.createStore({ }, onQueryChanged(state) { - this.query = state.query; - this._reset(); - this.fetchExplainPlan(); + if (state.query) { + this.query = state.query; + if (state.queryState === 'reset') { + this._reset(); + } else { + this.fetchExplainPlan(); + } + } }, /** diff --git a/src/internal-packages/query/lib/store/query-changed-store.js b/src/internal-packages/query/lib/store/query-changed-store.js index 57211f535ba..a3969d1b121 100644 --- a/src/internal-packages/query/lib/store/query-changed-store.js +++ b/src/internal-packages/query/lib/store/query-changed-store.js @@ -30,6 +30,7 @@ const QueryChangedStore = Reflux.createStore({ getInitialState() { return { query: null, + queryState: 'reset', sort: {}, limit: 0, skip: 0, @@ -47,6 +48,7 @@ const QueryChangedStore = Reflux.createStore({ if (!_.isEqual(this.state.query, state.lastExecutedQuery)) { this.setState({ query: state.lastExecutedQuery, + queryState: state.queryState, sort: state.sort, limit: state.limit, skip: state.skip, diff --git a/src/internal-packages/query/lib/store/query-store.js b/src/internal-packages/query/lib/store/query-store.js index cc036a0296d..c355465a974 100644 --- a/src/internal-packages/query/lib/store/query-store.js +++ b/src/internal-packages/query/lib/store/query-store.js @@ -15,6 +15,8 @@ const debug = require('debug')('mongodb-compass:stores:query'); const USER_TYPING_DEBOUNCE_MS = 100; const FEATURE_FLAG_REGEX = /^(enable|disable) (\w+)\s*$/; +const RESET_STATE = 'reset'; +const APPLY_STATE = 'apply'; const DEFAULT_QUERY = {}; const DEFAULT_SORT = { _id: -1 }; @@ -22,6 +24,8 @@ const DEFAULT_LIMIT = 1000; const DEFAULT_SKIP = 0; const DEFAULT_PROJECT = {}; const DEFAULT_MAX_TIME_MS = ms('10 seconds'); +const DEFAULT_STATE = RESET_STATE; +// const DEFAULT_QUERY_STRING = '{}'; /** * The reflux store for the schema. @@ -59,6 +63,7 @@ const QueryStore = Reflux.createStore({ project: DEFAULT_PROJECT, maxTimeMS: DEFAULT_MAX_TIME_MS, queryString: '', + queryState: DEFAULT_STATE, // either apply or reset valid: true, featureFlag: false, lastExecutedQuery: null, @@ -404,6 +409,8 @@ const QueryStore = Reflux.createStore({ return; } + this.setState({queryState: APPLY_STATE}); + // empty string is interpreted as {} if (this.state.queryString === '') { this.setQuery({}); @@ -419,10 +426,15 @@ const QueryStore = Reflux.createStore({ * dismiss current changes to the query and restore `{}` as the query. */ reset() { + this.setState({queryState: RESET_STATE}); if (!_.isEqual(this.state.query, {})) { this.setQuery({}); if (!_.isEqual(this.state.lastExecutedQuery, {})) { - this.apply(); + if (this.state.valid) { + this.setState({ + lastExecutedQuery: _.clone(this.state.query) + }); + } } } },