diff options
Diffstat (limited to 'devtools/client/memory/actions/view.js')
-rw-r--r-- | devtools/client/memory/actions/view.js | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/devtools/client/memory/actions/view.js b/devtools/client/memory/actions/view.js new file mode 100644 index 0000000000..af1bc7b21a --- /dev/null +++ b/devtools/client/memory/actions/view.js @@ -0,0 +1,69 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ +"use strict"; + +const { assert } = require("resource://devtools/shared/DevToolsUtils.js"); +const { actions } = require("resource://devtools/client/memory/constants.js"); +const { + findSelectedSnapshot, +} = require("resource://devtools/client/memory/utils.js"); +const refresh = require("resource://devtools/client/memory/actions/refresh.js"); + +/** + * Change the currently selected view. + * + * @param {viewState} view + */ +const changeView = (exports.changeView = function (view) { + return function ({ dispatch, getState }) { + dispatch({ + type: actions.CHANGE_VIEW, + newViewState: view, + oldDiffing: getState().diffing, + oldSelected: findSelectedSnapshot(getState()), + }); + }; +}); + +/** + * Given that we are in the INDIVIDUALS view state, go back to the state we were + * in before. + */ +const popView = (exports.popView = function () { + return function ({ dispatch, getState }) { + const { previous } = getState().view; + assert(previous); + dispatch({ + type: actions.POP_VIEW, + previousView: previous, + }); + }; +}); + +/** + * Change the currently selected view and ensure all our data is up to date from + * the heap worker. + * + * @param {viewState} view + * @param {HeapAnalysesClient} heapWorker + */ +exports.changeViewAndRefresh = function (view, heapWorker) { + return async function ({ dispatch, getState }) { + dispatch(changeView(view)); + await dispatch(refresh.refresh(heapWorker)); + }; +}; + +/** + * Given that we are in the INDIVIDUALS view state, go back to the state we were + * previously in and refresh our data. + * + * @param {HeapAnalysesClient} heapWorker + */ +exports.popViewAndRefresh = function (heapWorker) { + return async function ({ dispatch, getState }) { + dispatch(popView()); + await dispatch(refresh.refresh(heapWorker)); + }; +}; |