mirror of
https://github.com/trezor/trezor-wallet
synced 2024-12-30 19:00:53 +00:00
BlockchainReducer: add fee and block fields
This commit is contained in:
parent
95d1bdbd9e
commit
f28aa760fd
@ -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<BlockchainNetwork>;
|
||||
|
||||
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;
|
||||
|
Loading…
Reference in New Issue
Block a user