/* @flow */ 'use strict'; import * as CONNECT from '../actions/constants/TrezorConnect'; import * as TOKEN from '../actions/constants/Token'; export type Token = { loaded: boolean; +checksum: string; +name: string; +symbol: string; +address: string; +ethAddress: string; // foreign key +decimals: string; balance: string; } const initialState: Array = []; const setBalance = (state: Array, payload: any): Array => { const newState: Array = [ ...state ]; let index: number = state.findIndex(t => t.address === payload.address && t.ethAddress === payload.ethAddress); if (index >= 0) { newState[index].loaded = true; newState[index].balance = payload.balance; } return newState; } const create = (state: Array, payload: any): Array => { const newState: Array = [ ...state ]; const token: Token = { loaded: false, checksum: payload.checksum, name: payload.name, symbol: payload.symbol, address: payload.address, ethAddress: payload.ethAddress, decimals: payload.decimals, balance: '0' } newState.push(token); return newState; } const forget = (state: Array, action: any): Array => { return state.filter(t => t.checksum !== action.device.checksum); } const remove = (state: Array, action: any): Array => { return state.filter(t => { return !(t.ethAddress === action.token.ethAddress && t.address === action.token.address); }); } export default (state: Array = initialState, action: any): Array => { switch (action.type) { case TOKEN.ADD : return create(state, action.payload); case TOKEN.REMOVE : return remove(state, action); case TOKEN.SET_BALANCE : return setBalance(state, action.payload); case CONNECT.FORGET : case CONNECT.FORGET_SINGLE : return forget(state, action); case TOKEN.FROM_STORAGE : return action.payload; default: return state; } }