diff options
Diffstat (limited to 'ui/app/ducks/index.js')
-rw-r--r-- | ui/app/ducks/index.js | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/ui/app/ducks/index.js b/ui/app/ducks/index.js new file mode 100644 index 000000000..2d33edcfa --- /dev/null +++ b/ui/app/ducks/index.js @@ -0,0 +1,95 @@ +const clone = require('clone') +const extend = require('xtend') +const copyToClipboard = require('copy-to-clipboard') + +// +// Sub-Reducers take in the complete state and return their sub-state +// +const reduceMetamask = require('./metamask/metamask') +const reduceApp = require('./app/app') +const reduceLocale = require('./locale/locale') +const reduceSend = require('./send/send.duck').default +import reduceConfirmTransaction from './confirm-transaction/confirm-transaction.duck' +import reduceGas from './gas/gas.duck' + +window.METAMASK_CACHED_LOG_STATE = null + +module.exports = rootReducer + +function rootReducer (state, action) { + // clone + state = extend(state) + + if (action.type === 'GLOBAL_FORCE_UPDATE') { + return action.value + } + + // + // MetaMask + // + + state.metamask = reduceMetamask(state, action) + + // + // AppState + // + + state.appState = reduceApp(state, action) + + // + // LocaleMessages + // + + state.localeMessages = reduceLocale(state, action) + + // + // Send + // + + state.send = reduceSend(state, action) + + state.confirmTransaction = reduceConfirmTransaction(state, action) + + state.gas = reduceGas(state, action) + + window.METAMASK_CACHED_LOG_STATE = state + return state +} + +window.getCleanAppState = function () { + const state = clone(window.METAMASK_CACHED_LOG_STATE) + // append additional information + state.version = global.platform.getVersion() + state.browser = window.navigator.userAgent + // ensure seedWords are not included + if (state.metamask) delete state.metamask.seedWords + if (state.appState.currentView) delete state.appState.currentView.seedWords + return state +} + +window.logStateString = function (cb) { + const state = window.getCleanAppState() + global.platform.getPlatformInfo((err, platform) => { + if (err) return cb(err) + state.platform = platform + const stateString = JSON.stringify(state, removeSeedWords, 2) + cb(null, stateString) + }) +} + +window.logState = function (toClipboard) { + return window.logStateString((err, result) => { + if (err) { + console.error(err.message) + } else if (toClipboard) { + copyToClipboard(result) + console.log('State log copied') + } else { + console.log(result) + } + }) +} + +function removeSeedWords (key, value) { + return key === 'seedWords' ? undefined : value +} |