import * as types from "constants/action_types"; const reducers = {}; const address = localStorage.getItem("receiveAddress"); const buildDraftTransaction = () => ({ amount: undefined, address: undefined, }); const defaultState = { balance: 0, transactions: [], fetchingTransactions: false, receiveAddress: address, gettingNewAddress: false, draftTransaction: buildDraftTransaction(), }; reducers[types.FETCH_TRANSACTIONS_STARTED] = function(state, action) { return Object.assign({}, state, { fetchingTransactions: true, }); }; reducers[types.FETCH_TRANSACTIONS_COMPLETED] = function(state, action) { const oldTransactions = Object.assign({}, state.transactions); const byId = Object.assign({}, oldTransactions.byId); const { transactions } = action.data; transactions.forEach(transaction => { byId[transaction.txid] = transaction; }); const newTransactions = Object.assign({}, oldTransactions, { byId: byId, }); return Object.assign({}, state, { transactions: newTransactions, fetchingTransactions: false, }); }; reducers[types.GET_NEW_ADDRESS_STARTED] = function(state, action) { return Object.assign({}, state, { gettingNewAddress: true, }); }; reducers[types.GET_NEW_ADDRESS_COMPLETED] = function(state, action) { const { address } = action.data; localStorage.setItem("receiveAddress", address); return Object.assign({}, state, { gettingNewAddress: false, receiveAddress: address, }); }; reducers[types.UPDATE_BALANCE] = function(state, action) { return Object.assign({}, state, { balance: action.data.balance, }); }; reducers[types.CHECK_ADDRESS_IS_MINE_STARTED] = function(state, action) { return Object.assign({}, state, { checkingAddressOwnership: true, }); }; reducers[types.CHECK_ADDRESS_IS_MINE_COMPLETED] = function(state, action) { return Object.assign({}, state, { checkingAddressOwnership: false, }); }; reducers[types.SET_DRAFT_TRANSACTION_AMOUNT] = function(state, action) { const oldDraft = state.draftTransaction; const newDraft = Object.assign({}, oldDraft, { amount: parseFloat(action.data.amount), }); return Object.assign({}, state, { draftTransaction: newDraft, }); }; reducers[types.SET_DRAFT_TRANSACTION_ADDRESS] = function(state, action) { const oldDraft = state.draftTransaction; const newDraft = Object.assign({}, oldDraft, { address: action.data.address, }); return Object.assign({}, state, { draftTransaction: newDraft, }); }; reducers[types.SEND_TRANSACTION_STARTED] = function(state, action) { const newDraftTransaction = Object.assign({}, state.draftTransaction, { sending: true, }); return Object.assign({}, state, { draftTransaction: newDraftTransaction, }); }; reducers[types.SEND_TRANSACTION_COMPLETED] = function(state, action) { return Object.assign({}, state, { draftTransaction: buildDraftTransaction(), }); }; reducers[types.SEND_TRANSACTION_FAILED] = function(state, action) { const newDraftTransaction = Object.assign({}, state.draftTransaction, { sending: false, error: action.data.error, }); return Object.assign({}, state, { draftTransaction: newDraftTransaction, }); }; export default function reducer(state = defaultState, action) { const handler = reducers[action.type]; if (handler) return handler(state, action); return state; }