Jack Mallers
7 years ago
6 changed files with 109 additions and 3 deletions
@ -0,0 +1,93 @@ |
|||||
|
import { createSelector } from 'reselect' |
||||
|
import { ipcRenderer } from 'electron' |
||||
|
import { btc, usd } from '../utils' |
||||
|
import { setForm, resetForm } from './form' |
||||
|
import { showModal } from './modal' |
||||
|
|
||||
|
// ------------------------------------
|
||||
|
// Constants
|
||||
|
// ------------------------------------
|
||||
|
export const GET_TRANSACTIONS = 'GET_TRANSACTIONS' |
||||
|
export const RECEIVE_TRANSACTIONS = 'RECEIVE_TRANSACTIONS' |
||||
|
|
||||
|
export const SEND_TRANSACTION = 'SEND_TRANSACTION' |
||||
|
|
||||
|
export const TRANSACTION_SUCCESSFULL = 'TRANSACTION_SUCCESSFULL' |
||||
|
export const TRANSACTION_FAILED = 'TRANSACTION_FAILED' |
||||
|
|
||||
|
// ------------------------------------
|
||||
|
// Actions
|
||||
|
// ------------------------------------
|
||||
|
export function getTransactions() { |
||||
|
return { |
||||
|
type: GET_TRANSACTIONS |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
export function sendTransaction() { |
||||
|
return { |
||||
|
type: SEND_TRANSACTION |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// Send IPC event for payments
|
||||
|
export const fetchTransactions = () => (dispatch) => { |
||||
|
dispatch(getTransactions()) |
||||
|
ipcRenderer.send('lnd', { msg: 'transactions' }) |
||||
|
} |
||||
|
|
||||
|
// Receive IPC event for payments
|
||||
|
export const receiveTransactions = (event, { transactions }) => dispatch => dispatch({ type: RECEIVE_TRANSACTIONS, transactions }) |
||||
|
|
||||
|
export const sendCoins = ({ value, addr, currency, rate }) => (dispatch) => { |
||||
|
const amount = currency === 'usd' ? btc.btcToSatoshis(usd.usdToBtc(value, rate)) : btc.btcToSatoshis(value) |
||||
|
dispatch(sendPayment()) |
||||
|
ipcRenderer.send('lnd', { msg: 'sendCoins', data: { amount, addr } }) |
||||
|
} |
||||
|
|
||||
|
// Receive IPC event for successful payment
|
||||
|
// TODO: Add payment to state, not a total re-fetch
|
||||
|
export const transactionSuccessful = (event, { amount, addr, txid }) => (dispatch) => { |
||||
|
// Get the new list of transactions (TODO dont do an entire new fetch)
|
||||
|
fetchTransactions() |
||||
|
// Close the form modal once the payment was succesful
|
||||
|
dispatch(setForm({ modalOpen: false })) |
||||
|
// Show successful payment state
|
||||
|
dispatch(showModal('SUCCESSFUL_SEND_COINS', { txid, amount, addr })) |
||||
|
// TODO: Add successful on-chain payment to payments list once payments list supports on-chain and LN
|
||||
|
// dispatch({ type: PAYMENT_SUCCESSFULL, payment: { amount, addr, txid, pending: true } })
|
||||
|
dispatch({ type: TRANSACTION_SUCCESSFULL }) |
||||
|
// Reset the payment form
|
||||
|
dispatch(resetForm()) |
||||
|
} |
||||
|
|
||||
|
export const transactionError = () => (dispatch) => { |
||||
|
dispatch({ type: PAYMENT_FAILED }) |
||||
|
} |
||||
|
|
||||
|
|
||||
|
// ------------------------------------
|
||||
|
// Action Handlers
|
||||
|
// ------------------------------------
|
||||
|
const ACTION_HANDLERS = { |
||||
|
[GET_TRANSACTIONS]: state => ({ ...state, transactionLoading: true }), |
||||
|
[SEND_TRANSACTION]: state => ({ ...state, sendingTransaction: true }), |
||||
|
[RECEIVE_TRANSACTIONS]: (state, { transactions }) => ({ ...state, transactionLoading: false, transactions }), |
||||
|
[TRANSACTION_SUCCESSFULL]: state => ({ ...state, sendingTransaction: false }), |
||||
|
[TRANSACTION_FAILED]: state => ({ ...state, sendingTransaction: false }) |
||||
|
} |
||||
|
|
||||
|
// ------------------------------------
|
||||
|
// Reducer
|
||||
|
// ------------------------------------
|
||||
|
const initialState = { |
||||
|
sendingtransaction: false, |
||||
|
transactionLoading: false, |
||||
|
transactions: [] |
||||
|
} |
||||
|
|
||||
|
export default function transactionReducer(state = initialState, action) { |
||||
|
const handler = ACTION_HANDLERS[action.type] |
||||
|
|
||||
|
return handler ? handler(state, action) : state |
||||
|
} |
Loading…
Reference in new issue