MyCrypto/common/reducers/wallet.js

52 lines
1.2 KiB
JavaScript
Raw Normal View History

2017-06-29 16:03:11 -07:00
// @flow
2017-07-03 20:21:19 -07:00
import type {
WalletAction,
SetWalletAction,
SetBalanceAction,
SetTokenBalancesAction
2017-07-03 20:21:19 -07:00
} from 'actions/wallet';
import { BaseWallet } from 'libs/wallet';
import { toEther } from 'libs/units';
import Big from 'big.js';
2017-06-29 16:03:11 -07:00
2017-07-03 16:59:27 -07:00
export type State = {
2017-07-03 20:21:19 -07:00
inst: ?BaseWallet,
// in ETH
balance: Big,
2017-07-03 20:21:19 -07:00
tokens: {
[string]: Big
2017-07-03 20:21:19 -07:00
}
2017-07-03 16:59:27 -07:00
};
2017-06-29 16:03:11 -07:00
2017-07-03 16:59:27 -07:00
const initialState: State = {
2017-07-03 20:21:19 -07:00
inst: null,
balance: new Big(0),
2017-07-03 20:21:19 -07:00
tokens: {}
2017-07-03 16:59:27 -07:00
};
2017-06-29 16:03:11 -07:00
function setWallet(state: State, action: SetWalletAction): State {
return { ...state, inst: action.payload, balance: new Big(0), tokens: {} };
2017-07-03 16:59:27 -07:00
}
function setBalance(state: State, action: SetBalanceAction): State {
const ethBalance = toEther(action.payload, 'wei');
return { ...state, balance: ethBalance };
}
function setTokenBalances(state: State, action: SetTokenBalancesAction): State {
return { ...state, tokens: { ...state.tokens, ...action.payload } };
2017-06-29 16:03:11 -07:00
}
2017-07-04 05:19:04 -07:00
export function wallet(state: State = initialState, action: WalletAction): State {
2017-07-03 20:21:19 -07:00
switch (action.type) {
case 'WALLET_SET':
return setWallet(state, action);
case 'WALLET_SET_BALANCE':
return setBalance(state, action);
case 'WALLET_SET_TOKEN_BALANCES':
return setTokenBalances(state, action);
2017-07-03 20:21:19 -07:00
default:
return state;
}
2017-06-29 16:03:11 -07:00
}