From f28aa760fd54dd1e4ded4b55a5b2793058ead130 Mon Sep 17 00:00:00 2001 From: Szymon Lesisz Date: Thu, 29 Nov 2018 21:09:07 +0100 Subject: [PATCH] BlockchainReducer: add fee and block fields --- src/reducers/BlockchainReducer.js | 81 +++++++++++++++++++------------ 1 file changed, 51 insertions(+), 30 deletions(-) diff --git a/src/reducers/BlockchainReducer.js b/src/reducers/BlockchainReducer.js index 1b863232..48a44db2 100644 --- a/src/reducers/BlockchainReducer.js +++ b/src/reducers/BlockchainReducer.js @@ -3,57 +3,78 @@ import { BLOCKCHAIN } from 'trezor-connect'; import type { Action } from 'flowtype'; +import type { BlockchainConnect, BlockchainError, BlockchainBlock } from 'trezor-connect'; export type BlockchainNetwork = { - +shortcut: string; - connected: boolean; -} + +shortcut: string, + connected: boolean, + fee: string, + block: number, +}; export type State = Array; export const initialState: State = []; -const find = (state: State, shortcut: string): number => state.findIndex(b => b.shortcut === shortcut); - -const connect = (state: State, action: any): State => { +const onConnect = (state: State, action: BlockchainConnect): State => { const shortcut = action.payload.coin.shortcut.toLowerCase(); - const network: BlockchainNetwork = { + const network = state.find(b => b.shortcut === shortcut); + const { info } = action.payload; + if (network) { + const others = state.filter(b => b !== network); + return others.concat([{ + ...network, + connected: true, + fee: info.fee, + block: info.block, + }]); + } + + return state.concat([{ shortcut, connected: true, - }; - const newState: State = [...state]; - const index: number = find(newState, shortcut); - if (index >= 0) { - newState[index] = network; - } else { - newState.push(network); - } - return newState; + fee: info.fee, + block: info.block, + }]); }; -const disconnect = (state: State, action: any): State => { +const onError = (state: State, action: BlockchainError): State => { const shortcut = action.payload.coin.shortcut.toLowerCase(); - const network: BlockchainNetwork = { - shortcut, - connected: false, - }; - const newState: State = [...state]; - const index: number = find(newState, shortcut); - if (index >= 0) { - newState[index] = network; - } else { - newState.push(network); + const network = state.find(b => b.shortcut === shortcut); + if (network) { + const others = state.filter(b => b !== network); + return others.concat([{ + ...network, + connected: false, + }]); } - return newState; + + return state; +}; + +const onBlock = (state: State, action: BlockchainBlock): State => { + const shortcut = action.payload.coin.shortcut.toLowerCase(); + const network = state.find(b => b.shortcut === shortcut); + if (network) { + const others = state.filter(b => b !== network); + return others.concat([{ + ...network, + block: action.payload.block, + }]); + } + + return state; }; export default (state: State = initialState, action: Action): State => { switch (action.type) { case BLOCKCHAIN.CONNECT: - return connect(state, action); + return onConnect(state, action); case BLOCKCHAIN.ERROR: - return disconnect(state, action); + return onError(state, action); + case BLOCKCHAIN.BLOCK: + return onBlock(state, action); default: return state;