diff --git a/app/reducers/transaction.js b/app/reducers/transaction.js index ddba8e1b..3f65d025 100644 --- a/app/reducers/transaction.js +++ b/app/reducers/transaction.js @@ -121,26 +121,30 @@ export const transactionError = (event, { error }) => dispatch => { } // Listener for when a new transaction is pushed from the subscriber -export const newTransaction = (event, { transaction }) => dispatch => { - // Fetch new balance - dispatch(fetchBalance()) - - decorateTransaction(transaction) - - dispatch({ type: ADD_TRANSACTION, transaction }) - - // HTML 5 desktop notification for the new transaction - const notifTitle = transaction.received - ? 'On-chain Transaction Received!' - : 'On-chain Transaction Sent!' - const notifBody = transaction.received - ? "Lucky you, you just received a new on-chain transaction. I'm jealous." - : "Hate to see 'em go but love to watch 'em leave. Your on-chain transaction successfully sent." +export const newTransaction = (event, { transaction }) => (dispatch, getState) => { + // add the transaction only if we are not already aware of it + if (!getState().transactions.find(tx => tx.tx_hash === transaction.tx_hash)) { + // Fetch new balance + dispatch(fetchBalance()) - showNotification(notifTitle, notifBody) + decorateTransaction(transaction) - // Generate a new address - dispatch(newAddress('np2wkh')) + dispatch({ type: ADD_TRANSACTION, transaction }) + + // HTML 5 desktop notification for the new transaction + if (transaction.received) { + showNotification( + 'On-chain Transaction Received!', + "Lucky you, you just received a new on-chain transaction. I'm jealous." + ) + dispatch(newAddress('np2wkh')) // Generate a new address + } else { + showNotification( + 'On-chain Transaction Sent!', + "Hate to see 'em go but love to watch 'em leave. Your on-chain transaction successfully sent." + ) + } + } } // ------------------------------------ @@ -156,15 +160,10 @@ const ACTION_HANDLERS = { }), [TRANSACTION_SUCCESSFULL]: state => ({ ...state, sendingTransaction: false }), [TRANSACTION_FAILED]: state => ({ ...state, sendingTransaction: false }), - [ADD_TRANSACTION]: (state, { transaction }) => { - // add the transaction only if we are not already aware of it - return state.transactions.find(tx => tx.tx_hash === transaction.tx_hash) - ? state - : { - ...state, - transactions: [transaction, ...state.transactions] - } - }, + [ADD_TRANSACTION]: (state, { transaction }) => ({ + ...state, + transactions: [transaction, ...state.transactions] + }), [SHOW_SUCCESS_TRANSACTION_SCREEN]: (state, { txid }) => ({ ...state, successTransactionScreen: { show: true, txid }