A Metamask fork with Infura removed and default networks editable
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
ciphermask/ui/app/ducks/app/app.js

375 lines
8.0 KiB

import * as actionConstants from '../../store/actionConstants'
// actionConstants
const SET_THREEBOX_LAST_UPDATED = 'metamask/app/SET_THREEBOX_LAST_UPDATED'
export default function reduceApp (state = {}, action) {
// default state
const appState = Object.assign({
shouldClose: false,
menuOpen: false,
modal: {
open: false,
modalState: {
name: null,
props: {},
},
previousModalState: {
name: null,
},
},
sidebar: {
isOpen: false,
transitionName: '',
type: '',
props: {},
},
alertOpen: false,
alertMessage: null,
qrCodeData: null,
networkDropdownOpen: false,
accountDetail: {
subview: 'transactions',
},
// Used to display loading indicator
isLoading: false,
// Used to display error text
warning: null,
buyView: {},
isMouseUser: false,
gasIsLoading: false,
defaultHdPaths: {
trezor: `m/44'/60'/0'/0`,
ledger: `m/44'/60'/0'/0/0`,
},
lastSelectedProvider: null,
networksTabSelectedRpcUrl: '',
networksTabIsInAddMode: false,
loadingMethodData: false,
show3BoxModalAfterImport: false,
threeBoxLastUpdated: null,
requestAccountTabs: {},
openMetaMaskTabs: {},
currentWindowTab: {},
}, state)
switch (action.type) {
// dropdown methods
case actionConstants.NETWORK_DROPDOWN_OPEN:
return {
...appState,
networkDropdownOpen: true,
}
case actionConstants.NETWORK_DROPDOWN_CLOSE:
return {
...appState,
networkDropdownOpen: false,
}
// sidebar methods
case actionConstants.SIDEBAR_OPEN:
return {
...appState,
sidebar: {
...action.value,
isOpen: true,
},
}
case actionConstants.SIDEBAR_CLOSE:
return {
...appState,
sidebar: {
...appState.sidebar,
isOpen: false,
},
}
// alert methods
case actionConstants.ALERT_OPEN:
return {
...appState,
alertOpen: true,
alertMessage: action.value,
}
case actionConstants.ALERT_CLOSE:
return {
...appState,
alertOpen: false,
alertMessage: null,
}
// qr scanner methods
case actionConstants.QR_CODE_DETECTED:
return {
...appState,
qrCodeData: action.value,
}
// modal methods:
case actionConstants.MODAL_OPEN: {
const { name, ...modalProps } = action.payload
return {
...appState,
modal: {
open: true,
modalState: {
name: name,
props: { ...modalProps },
},
previousModalState: { ...appState.modal.modalState },
},
}
}
case actionConstants.MODAL_CLOSE:
return {
...appState,
modal: Object.assign(
appState.modal,
{ open: false },
{ modalState: { name: null, props: {} } },
{ previousModalState: appState.modal.modalState },
),
}
case actionConstants.CLEAR_ACCOUNT_DETAILS:
return {
...appState,
accountDetail: {},
}
case actionConstants.FORGOT_PASSWORD:
return {
...appState,
forgottenPassword: action.value,
}
case actionConstants.SHOW_SEND_TOKEN_PAGE:
return {
...appState,
warning: null,
}
case actionConstants.LOCK_METAMASK:
return {
...appState,
warning: null,
}
// accounts
case actionConstants.GO_HOME:
return {
...appState,
accountDetail: {
subview: 'transactions',
accountExport: 'none',
privateKey: '',
},
warning: null,
}
case actionConstants.SHOW_ACCOUNT_DETAIL:
return {
...appState,
forgottenPassword: appState.forgottenPassword ? !appState.forgottenPassword : null,
accountDetail: {
subview: 'transactions',
accountExport: 'none',
privateKey: '',
},
}
case actionConstants.SHOW_ACCOUNTS_PAGE:
return {
...appState,
isLoading: false,
warning: null,
scrollToBottom: false,
forgottenPassword: false,
}
case actionConstants.SHOW_CONF_TX_PAGE:
return {
...appState,
txId: action.id,
warning: null,
isLoading: false,
}
case actionConstants.COMPLETED_TX:
if (action.value.unconfirmedActionsCount > 0) {
return {
...appState,
txId: null,
warning: null,
}
} else {
return {
...appState,
// indicate notification should close
shouldClose: true,
warning: null,
txId: null,
accountDetail: {
subview: 'transactions',
},
}
}
case actionConstants.TRANSACTION_ERROR:
return {
...appState,
}
case actionConstants.UNLOCK_FAILED:
return {
...appState,
warning: action.value || 'Incorrect password. Try again.',
}
case actionConstants.UNLOCK_SUCCEEDED:
return {
...appState,
warning: '',
}
case actionConstants.SET_HARDWARE_WALLET_DEFAULT_HD_PATH: {
const { device, path } = action.value
const newDefaults = { ...appState.defaultHdPaths }
newDefaults[device] = path
return {
...appState,
defaultHdPaths: newDefaults,
}
}
case actionConstants.SHOW_LOADING:
return {
...appState,
isLoading: true,
loadingMessage: action.value,
}
case actionConstants.HIDE_LOADING:
return {
...appState,
isLoading: false,
}
case actionConstants.DISPLAY_WARNING:
return {
...appState,
warning: action.value,
isLoading: false,
}
case actionConstants.HIDE_WARNING:
return {
...appState,
warning: undefined,
}
case actionConstants.SHOW_PRIVATE_KEY:
return {
...appState,
accountDetail: {
subview: 'export',
accountExport: 'completed',
privateKey: action.value,
},
}
case actionConstants.SET_MOUSE_USER_STATE:
return {
...appState,
isMouseUser: action.value,
}
case actionConstants.GAS_LOADING_STARTED:
return {
...appState,
gasIsLoading: true,
}
case actionConstants.GAS_LOADING_FINISHED:
return {
...appState,
gasIsLoading: false,
}
case actionConstants.SET_PREVIOUS_PROVIDER:
if (action.value === 'loading') {
return appState
}
return {
...appState,
lastSelectedProvider: action.value,
}
case actionConstants.SET_SELECTED_SETTINGS_RPC_URL:
return {
...appState,
networksTabSelectedRpcUrl: action.value,
}
case actionConstants.SET_NETWORKS_TAB_ADD_MODE:
return {
...appState,
networksTabIsInAddMode: action.value,
}
case actionConstants.LOADING_METHOD_DATA_STARTED:
return {
...appState,
loadingMethodData: true,
}
case actionConstants.LOADING_METHOD_DATA_FINISHED:
return {
...appState,
loadingMethodData: false,
}
case SET_THREEBOX_LAST_UPDATED:
return {
...appState,
threeBoxLastUpdated: action.value,
}
case actionConstants.SET_REQUEST_ACCOUNT_TABS:
return {
...appState,
requestAccountTabs: action.value,
}
case actionConstants.SET_OPEN_METAMASK_TAB_IDS:
return {
...appState,
openMetaMaskTabs: action.value,
}
case actionConstants.SET_CURRENT_WINDOW_TAB:
return {
...appState,
currentWindowTab: action.value,
}
default:
return appState
}
}
// Action Creators
export function setThreeBoxLastUpdated (lastUpdated) {
return {
type: SET_THREEBOX_LAST_UPDATED,
value: lastUpdated,
}
}