this.setState({ modalOpen: true })}>
+
this.setState({ modalOpen: true })}>
Address
diff --git a/app/components/Wallet/Wallet.scss b/app/components/Wallet/Wallet.scss
index 88b4e6bf..b2cf35e2 100644
--- a/app/components/Wallet/Wallet.scss
+++ b/app/components/Wallet/Wallet.scss
@@ -58,10 +58,10 @@
height: calc(100% - 50px);
div {
- font-size: 20px;
- padding: 10px 25px;
+ padding: 7px 20px;
background: $main;
transition: background 0.25s;
+ color: $black;
&:hover {
background: darken($main, 10%);
diff --git a/app/containers/Root.js b/app/containers/Root.js
index e54a8840..da0e6794 100644
--- a/app/containers/Root.js
+++ b/app/containers/Root.js
@@ -3,9 +3,10 @@ import React from 'react'
import { Provider, connect } from 'react-redux'
import { ConnectedRouter } from 'react-router-redux'
import PropTypes from 'prop-types'
-import { fetchBlockHeight, lndSelectors } from 'reducers/lnd'
-import LoadingBolt from 'components/LoadingBolt'
-import LndSyncing from 'components/LndSyncing'
+
+import LoadingBolt from '../components/LoadingBolt'
+import LndSyncing from '../components/LndSyncing'
+import { fetchBlockHeight, lndSelectors } from '../reducers/lnd'
import Routes from '../routes'
const mapDispatchToProps = {
@@ -18,11 +19,6 @@ const mapStateToProps = state => ({
syncPercentage: lndSelectors.syncPercentage(state)
})
-type RootType = {
- store: {},
- history: {}
-};
-
const Root = ({
store,
history,
@@ -40,7 +36,7 @@ const Root = ({
/>
)
}
-
+
// Don't launch the app without gRPC connection
if (!lnd.grpcStarted) { return
}
diff --git a/app/index.js b/app/index.js
index f7d279f0..c260f491 100644
--- a/app/index.js
+++ b/app/index.js
@@ -1,27 +1,27 @@
-import React from 'react';
-import { render } from 'react-dom';
-import { AppContainer } from 'react-hot-loader';
-import Root from './containers/Root';
-import { configureStore, history } from './store/configureStore';
-import './app.global.scss';
+import React from 'react'
+import { render } from 'react-dom'
+import { AppContainer } from 'react-hot-loader'
+import Root from './containers/Root'
+import { configureStore, history } from './store/configureStore'
+import './app.global.scss'
-const store = configureStore();
+const store = configureStore()
render(
,
document.getElementById('root')
-);
+)
if (module.hot) {
module.hot.accept('./containers/Root', () => {
- const NextRoot = require('./containers/Root'); // eslint-disable-line global-require
+ const NextRoot = require('./containers/Root') // eslint-disable-line global-require
render(
,
document.getElementById('root')
- );
- });
+ )
+ })
}
diff --git a/app/lnd/config/index.js b/app/lnd/config/index.js
index fb37f404..c0366490 100644
--- a/app/lnd/config/index.js
+++ b/app/lnd/config/index.js
@@ -8,7 +8,7 @@ import { join } from 'path'
let loc
switch (platform()) {
case 'darwin':
- loc = 'Library/Application\ Support/Lnd/tls.cert'
+ loc = 'Library/Application Support/Lnd/tls.cert'
break
case 'linux':
loc = '.lnd/tls.cert'
diff --git a/app/lnd/lib/lightning.js b/app/lnd/lib/lightning.js
index a289e39d..f01c0ed1 100644
--- a/app/lnd/lib/lightning.js
+++ b/app/lnd/lib/lightning.js
@@ -6,7 +6,7 @@ import config from '../config'
module.exports = (rpcpath, host) => {
const lndCert = fs.readFileSync(config.cert)
const credentials = grpc.credentials.createSsl(lndCert)
-
+
const rpc = grpc.load(path.join(__dirname, 'rpc.proto'))
return new rpc.lnrpc.Lightning(host, credentials)
diff --git a/app/lnd/methods/paymentsController.js b/app/lnd/methods/paymentsController.js
index 139486c7..6a5d5397 100644
--- a/app/lnd/methods/paymentsController.js
+++ b/app/lnd/methods/paymentsController.js
@@ -12,7 +12,7 @@ export function sendPaymentSync(lnd, { paymentRequest }) {
return
}
- if (!data.payment_route) { reject({ error: data.payment_error }) }
+ if (!data || !data.payment_route) { reject({ error: data.payment_error }) }
resolve(data)
})
diff --git a/app/lnd/subscribe/transactions.js b/app/lnd/subscribe/transactions.js
index 0c816c4a..5c3f0091 100644
--- a/app/lnd/subscribe/transactions.js
+++ b/app/lnd/subscribe/transactions.js
@@ -9,5 +9,5 @@ export default function subscribeToTransactions(mainWindow, lnd) {
})
call.on('end', () => console.log('end'))
call.on('error', error => console.log('error: ', error))
- call.on('status', status => console.log('status: ', status))
+ call.on('status', status => console.log('TRANSACTION STATUS: ', status))
}
diff --git a/app/lnd/utils/index.js b/app/lnd/utils/index.js
new file mode 100644
index 00000000..6fa3f7c6
--- /dev/null
+++ b/app/lnd/utils/index.js
@@ -0,0 +1,42 @@
+import zbase32 from 'zbase32'
+
+function convertBigEndianBufferToLong(longBuffer) {
+ let longValue = 0
+ const byteArray = Buffer.from(longBuffer).swap64()
+
+ for (let i = byteArray.length - 1; i >= 0; i -= 1) {
+ longValue = (longValue * 256) + byteArray[i]
+ }
+
+ return longValue
+}
+
+export function decodeInvoice(payreq) {
+ const payreqBase32 = zbase32.decode(payreq)
+
+ const bufferHexRotated = Buffer.from(payreqBase32).toString('hex')
+ const bufferHex = bufferHexRotated.substr(bufferHexRotated.length - 1, bufferHexRotated.length)
+ + bufferHexRotated.substr(0, bufferHexRotated.length - 1)
+ const buffer = Buffer.from(bufferHex, 'hex')
+
+ const pubkeyBuffer = buffer.slice(0, 33)
+ const pubkey = pubkeyBuffer.toString('hex')
+
+ const paymentHashBuffer = buffer.slice(33, 65)
+ const paymentHashHex = paymentHashBuffer.toString('hex')
+
+ const valueBuffer = buffer.slice(65, 73)
+
+ const amount = convertBigEndianBufferToLong(valueBuffer)
+
+ return {
+ payreq,
+ pubkey,
+ amount,
+ r_hash: paymentHashHex
+ }
+}
+
+export default {
+ decodeInvoice
+}
diff --git a/app/main.dev.js b/app/main.dev.js
index 8f69f8e2..dfc91720 100644
--- a/app/main.dev.js
+++ b/app/main.dev.js
@@ -165,6 +165,7 @@ export const startLnd = () => {
'--bitcoin.active',
'--bitcoin.testnet',
'--neutrino.active',
+ '--neutrino.connect=btcd0.lightning.computer:18333',
'--neutrino.connect=faucet.lightning.community:18333',
'--autopilot.active',
'--debuglevel=debug',
diff --git a/app/package.json b/app/package.json
index dc68b51d..ba28606b 100644
--- a/app/package.json
+++ b/app/package.json
@@ -15,7 +15,7 @@
},
"license": "MIT",
"dependencies": {
- "grpc": "^1.6.6",
+ "grpc": "^1.7.3",
"ps-node": "^0.1.6",
"react-icons": "^2.2.5"
}
diff --git a/app/reducers/address.js b/app/reducers/address.js
index 7ecb63f5..fb676836 100644
--- a/app/reducers/address.js
+++ b/app/reducers/address.js
@@ -5,7 +5,7 @@ import { ipcRenderer } from 'electron'
export const GET_ADDRESS = 'GET_ADDRESS'
export const RECEIVE_ADDRESS = 'RECEIVE_ADDRESS'
-// LND expects types to be sent as int, so this object will allow mapping from string to int
+// LND expects types to be sent as int, so this object will allow mapping from string to int
const addressTypes = {
p2wkh: 0,
np2wkh: 1,
diff --git a/app/reducers/channels.js b/app/reducers/channels.js
index cc7f6c0d..e28f60d1 100644
--- a/app/reducers/channels.js
+++ b/app/reducers/channels.js
@@ -165,27 +165,32 @@ export const closeChannel = ({ channel_point }) => (dispatch) => {
// TODO: Decide how to handle streamed updates for closing channels
// Receive IPC event for closeChannel
-export const closeChannelSuccessful = () => (dispatch) => {
+export const closeChannelSuccessful = (event, data) => (dispatch) => {
+ console.log('PUSH CLOSE CHANNEL SUCCESSFUL: ', data)
dispatch(fetchChannels())
}
// Receive IPC event for updated closing channel
-export const pushclosechannelupdated = () => (dispatch) => {
+export const pushclosechannelupdated = (event, data) => (dispatch) => {
+ console.log('PUSH CLOSE CHANNEL UPDATED: ', data)
dispatch(fetchChannels())
}
// Receive IPC event for closing channel end
-export const pushclosechannelend = () => (dispatch) => {
+export const pushclosechannelend = (event, data) => (dispatch) => {
+ console.log('PUSH CLOSE CHANNEL END: ', data)
dispatch(fetchChannels())
}
// Receive IPC event for closing channel error
-export const pushclosechannelerror = () => (dispatch) => {
+export const pushclosechannelerror = (event, data) => (dispatch) => {
+ console.log('PUSH CLOSE CHANNEL END: ', data)
dispatch(fetchChannels())
}
// Receive IPC event for closing channel status
-export const pushclosechannelstatus = () => (dispatch) => {
+export const pushclosechannelstatus = (event, data) => (dispatch) => {
+ console.log('PUSH CLOSE CHANNEL STATUS: ', data)
dispatch(fetchChannels())
}
@@ -201,13 +206,13 @@ export const channelGraphData = (event, data) => (dispatch, getState) => {
// dispatch(fetchDescribeNetwork())
// loop through the channel updates
- for (let i = 0; i < channel_updates.length; i++) {
+ for (let i = 0; i < channel_updates.length; i += 1) {
const channel_update = channel_updates[i]
const { advertising_node, connecting_node } = channel_update
// if our node is involved in this update we wanna show a notification
if (info.data.identity_pubkey === advertising_node || info.data.identity_pubkey === connecting_node) {
- // this channel has to do with the user, lets fetch a new channel list for them
+ // this channel has to do with the user, lets fetch a new channel list for them
// TODO: full fetch is probably not necessary
dispatch(fetchChannels())
diff --git a/app/reducers/info.js b/app/reducers/info.js
index 0a80e8cc..f86641d3 100644
--- a/app/reducers/info.js
+++ b/app/reducers/info.js
@@ -1,7 +1,6 @@
import { createSelector } from 'reselect'
import { ipcRenderer } from 'electron'
-import { fetchBalance } from './balance'
-import { newAddress } from './address'
+
// ------------------------------------
// Constants
// ------------------------------------
@@ -25,8 +24,6 @@ export const fetchInfo = () => async (dispatch) => {
// Receive IPC event for info
export const receiveInfo = (event, data) => (dispatch) => {
- dispatch(fetchBalance())
- dispatch(newAddress('p2pkh'))
dispatch({ type: RECEIVE_INFO, data })
}
diff --git a/app/reducers/lnd.js b/app/reducers/lnd.js
index 997fec38..eaa19de3 100644
--- a/app/reducers/lnd.js
+++ b/app/reducers/lnd.js
@@ -59,7 +59,7 @@ export const lndStdout = (event, line) => (dispatch) => {
trimmed = line.slice(line.indexOf('Catching up block hashes to height') + 'Catching up block hashes to height'.length).trim()
height = trimmed.match(/[-]{0,1}[\d.]*[\d]+/g)[0]
}
-
+
dispatch({ type: RECEIVE_LINE, lndBlockHeight: height })
}
@@ -95,7 +95,7 @@ const ACTION_HANDLERS = {
[GET_BLOCK_HEIGHT]: state => ({ ...state, fetchingBlockHeight: true }),
[RECEIVE_BLOCK_HEIGHT]: (state, { blockHeight }) => ({ ...state, blockHeight, fetchingBlockHeight: false }),
-
+
[GRPC_DISCONNECTED]: state => ({ ...state, grpcStarted: false }),
[GRPC_CONNECTED]: state => ({ ...state, grpcStarted: true })
}
diff --git a/app/reducers/network.js b/app/reducers/network.js
index 07680b57..0d0de227 100644
--- a/app/reducers/network.js
+++ b/app/reducers/network.js
@@ -172,9 +172,9 @@ const ACTION_HANDLERS = {
[SET_CURRENT_ROUTE]: (state, { route }) => ({ ...state, currentRoute: route }),
[SET_CURRENT_CHANNEL]: (state, { selectedChannel }) => ({ ...state, selectedChannel }),
-
+
[SET_CURRENT_TAB]: (state, { currentTab }) => ({ ...state, currentTab }),
-
+
[SET_CURRENT_PEER]: (state, { currentPeer }) => ({ ...state, currentPeer }),
[UPDATE_PAY_REQ]: (state, { pay_req }) => ({ ...state, pay_req }),
@@ -280,7 +280,7 @@ const initialState = {
nodes: [],
edges: [],
selectedChannel: {},
-
+
currentTab: 1,
currentPeer: {},
diff --git a/app/reducers/peers.js b/app/reducers/peers.js
index 78084db4..7d88b705 100644
--- a/app/reducers/peers.js
+++ b/app/reducers/peers.js
@@ -124,7 +124,7 @@ const ACTION_HANDLERS = {
[GET_PEERS]: state => ({ ...state, peersLoading: true }),
[RECEIVE_PEERS]: (state, { peers }) => ({ ...state, peersLoading: false, peers }),
-
+
[UPDATE_SEARCH_QUERY]: (state, { searchQuery }) => ({ ...state, searchQuery })
}
diff --git a/app/routes/activity/components/components/Modal/Invoice/Invoice.js b/app/routes/activity/components/components/Modal/Invoice/Invoice.js
index b82c464b..ddb78493 100644
--- a/app/routes/activity/components/components/Modal/Invoice/Invoice.js
+++ b/app/routes/activity/components/components/Modal/Invoice/Invoice.js
@@ -6,7 +6,7 @@ import 'moment-timezone'
import QRCode from 'qrcode.react'
-import { MdCheck } from 'react-icons/lib/md'
+import { FaCircle } from 'react-icons/lib/fa'
import CurrencyIcon from 'components/CurrencyIcon'
import { btc } from 'utils'
@@ -16,20 +16,33 @@ import styles from './Invoice.scss'
const Invoice = ({ invoice, ticker, currentTicker }) => (
-
{invoice.memo}
-
-
-
- {
- ticker.currency === 'usd' ?
- btc.satoshisToUsd(invoice.value, currentTicker.price_usd)
- :
- btc.satoshisToBtc(invoice.value)
- }
-
-
+
+ {
+ !invoice.settled &&
+
+
+ Not Paid
+
+ }
+
+
+ {invoice.memo}
+
+
+ {
+ ticker.currency === 'usd' ?
+ btc.satoshisToUsd(invoice.value, currentTicker.price_usd)
+ :
+ btc.satoshisToBtc(invoice.value)
+ }
+
+ BTC
+
+
-
+
+
+
(
defaultValue={invoice.payment_request}
/>
-
- {
- invoice.settled ?
-
Paid
- :
-
Not Paid
- }
-
Created on
{invoice.creation_date * 1000}
diff --git a/app/routes/activity/components/components/Modal/Invoice/Invoice.scss b/app/routes/activity/components/components/Modal/Invoice/Invoice.scss
index 6a55e812..3880bfb0 100644
--- a/app/routes/activity/components/components/Modal/Invoice/Invoice.scss
+++ b/app/routes/activity/components/components/Modal/Invoice/Invoice.scss
@@ -1,72 +1,75 @@
@import '../../../../../../variables.scss';
.container {
- padding: 40px;
+ .settled {
+ position: absolute;
+ top: 0;
+ padding: 10px 0 10px 40px;
+ color: $darkestgrey;
+
+ svg {
+ line-height: 20px;
+ font-size: 10px;
+ vertical-align: middle;
+ }
+
+ span {
+ font-size: 12px;
+ margin-left: 5px;
+ }
+ }
+
+ header {
+ background: $lightgrey;
+ padding-bottom: 20px;
+ }
h3 {
- font-size: 24px;
+ font-size: 20px;
color: $black;
font-weight: bold;
- text-align: center;
- margin-bottom: 10px;
+ padding: 10px 40px;
}
h1 {
- text-align: center;
color: $main;
- margin: 20px 20px 60px 0;
+ padding: 10px 40px;
- svg {
+ .value {
font-size: 30px;
- vertical-align: top;
}
- span svg[data-icon='ltc'] {
- width: 30px;
- height: 30px;
+ i {
+ margin-left: 2px;
vertical-align: top;
-
- g {
- transform: scale(1.75) translate(-5px, -5px);
- }
- }
-
- .value {
- font-size: 60px;
}
}
.qrcode {
text-align: center;
+ margin-top: 40px;
+
+ }
+
+ .input {
+ padding: 10px 40px;
.paymentRequest {
text-align: center;
- font-size: 0.5vw;
- margin-top: 20px;
- padding: 5px;
- border-radius: 5px;
+ font-size: 12px;
+ padding: 15px;
background: $lightgrey;
- border: 1px solid $darkgrey;
+ border: 1px solid transparent;
display: block;
- width: 100%;
- }
- }
-
- .settled {
- text-align: center;
- color: $main;
- text-transform: uppercase;
- font-size: 20px;
- margin: 30px 0;
- font-weight: bold;
-
- svg {
- line-height: 20px;
+ width: 90%;
+ margin: 20px auto 0 auto;
}
}
.date {
text-align: center;
+ padding-bottom: 40px;
+ margin-top: 20px;
time {
margin-left: 3px;
diff --git a/app/routes/activity/components/components/Modal/Modal.js b/app/routes/activity/components/components/Modal/Modal.js
index 383316f5..b53a98df 100644
--- a/app/routes/activity/components/components/Modal/Modal.js
+++ b/app/routes/activity/components/components/Modal/Modal.js
@@ -6,6 +6,10 @@ import Transaction from './Transaction'
import Payment from './Payment'
import Invoice from './Invoice'
+import { MdClose } from 'react-icons/lib/md'
+
+import styles from './Modal.scss'
+
const Modal = ({ modalType, modalProps, hideActivityModal, ticker, currentTicker }) => {
const MODAL_COMPONENTS = {
TRANSACTION: Transaction,
@@ -23,7 +27,9 @@ const Modal = ({ modalType, modalProps, hideActivityModal, ticker, currentTicker
right: '0',
bottom: 'auto',
width: '40%',
- margin: '50px auto'
+ margin: '50px auto',
+ borderRadius: 'none',
+ padding: '0'
}
}
@@ -41,6 +47,11 @@ const Modal = ({ modalType, modalProps, hideActivityModal, ticker, currentTicker
parentSelector={() => document.body}
style={customStyles}
>
+
+ hideActivityModal()}>
+
+
+
)
diff --git a/app/routes/activity/components/components/Modal/Modal.scss b/app/routes/activity/components/components/Modal/Modal.scss
new file mode 100644
index 00000000..b8288b87
--- /dev/null
+++ b/app/routes/activity/components/components/Modal/Modal.scss
@@ -0,0 +1,13 @@
+@import '../../../../../variables.scss';
+
+.closeContainer {
+ background: $lightgrey;
+ text-align: right;
+ padding: 10px;
+
+ span {
+ color: $darkestgrey;
+ font-size: 20px;
+ cursor: pointer;
+ }
+}
\ No newline at end of file
diff --git a/app/routes/activity/components/components/Modal/Payment/Payment.js b/app/routes/activity/components/components/Modal/Payment/Payment.js
index 6b27adf2..41f55619 100644
--- a/app/routes/activity/components/components/Modal/Payment/Payment.js
+++ b/app/routes/activity/components/components/Modal/Payment/Payment.js
@@ -12,21 +12,30 @@ import styles from './Payment.scss'
const Payment = ({ payment, ticker, currentTicker }) => (
-
{payment.payment_hash}
-
-
-
- {
- ticker.currency === 'usd' ?
- btc.satoshisToUsd(payment.value, currentTicker.price_usd)
- :
- btc.satoshisToBtc(payment.value)
- }
-
-
+
Fee
{payment.fee}
+ Hops
+ {payment.path.length}
Date
{payment.creation_date * 1000}
diff --git a/app/routes/activity/components/components/Modal/Payment/Payment.scss b/app/routes/activity/components/components/Modal/Payment/Payment.scss
index 304fce58..6c88b58f 100644
--- a/app/routes/activity/components/components/Modal/Payment/Payment.scss
+++ b/app/routes/activity/components/components/Modal/Payment/Payment.scss
@@ -1,38 +1,44 @@
@import '../../../../../../variables.scss';
.container {
- padding: 40px;
+ header {
+ padding: 5px 40px 20px 40px;
+ background: $lightgrey;
+
+ .title {
+ display: flex;
+ flex-direction: row;
+ margin-bottom: 30px;
+
+ h2 {
+ text-transform: uppercase;
+ font-size: 24px;
+ margin-right: 10px;
+ }
+ }
+ }
h1 {
- text-align: center;
color: $main;
- margin: 60px 30px 60px 0;
- svg {
- font-size: 30px;
- vertical-align: top;
+ .value {
+ font-size: 24px;
}
- span svg[data-icon='ltc'] {
- width: 30px;
- height: 30px;
+ i {
+ margin-left: 2px;
vertical-align: top;
-
- g {
- transform: scale(1.75) translate(-5px, -5px);
- }
- }
-
- .value {
- font-size: 80px;
}
}
h3 {
font-size: 14px;
text-align: center;
- color: $black;
- font-weight: bold;
+ color: $darkestgrey;
+ }
+
+ dl {
+ padding: 40px 40px 40px 40px;
}
dt {
@@ -48,8 +54,8 @@
dd {
text-align: right;
font-weight: 400;
- padding: 19px 0;
+ padding: 30px 0 10px 0;
margin-left: 0;
- border-top: 1px solid $darkgrey;
+ border-bottom: 1px solid $darkgrey;
}
}
\ No newline at end of file
diff --git a/app/routes/activity/components/components/Modal/Transaction/Transaction.js b/app/routes/activity/components/components/Modal/Transaction/Transaction.js
index 80290714..f1359842 100644
--- a/app/routes/activity/components/components/Modal/Transaction/Transaction.js
+++ b/app/routes/activity/components/components/Modal/Transaction/Transaction.js
@@ -1,3 +1,4 @@
+import { shell } from 'electron'
import React from 'react'
import PropTypes from 'prop-types'
@@ -12,31 +13,42 @@ import styles from './Transaction.scss'
const Transaction = ({ transaction, ticker, currentTicker }) => (
-
- {
- transaction.amount < 0 ?
- 'Sent'
- :
- 'Received'
- }
-
-
{transaction.tx_hash}
-
-
-
- {
- ticker.currency === 'usd' ?
- btc.satoshisToUsd(transaction.amount, currentTicker.price_usd)
- :
- btc.satoshisToBtc(transaction.amount)
- }
-
-
+
+
+
+ {
+ transaction.amount < 0 ?
+ 'Sent'
+ :
+ 'Received'
+ }
+
+
+
+ {
+ ticker.currency === 'usd' ?
+ btc.satoshisToUsd(transaction.amount, currentTicker.price_usd)
+ :
+ btc.satoshisToBtc(transaction.amount)
+ }
+
+ BTC
+
+
+ shell.openExternal(`https://testnet.smartbit.com.au/tx/${transaction.tx_hash}`)}>{transaction.tx_hash}
+
Confirmations
{transaction.num_confirmations}
Fee
- {transaction.total_fees}
+
+ {
+ ticker.currency === 'usd' ?
+ btc.satoshisToUsd(transaction.total_fees)
+ :
+ btc.satoshisToBtc(transaction.total_fees)
+ }
+
Date
{transaction.time_stamp * 1000}
diff --git a/app/routes/activity/components/components/Modal/Transaction/Transaction.scss b/app/routes/activity/components/components/Modal/Transaction/Transaction.scss
index 283de75b..f7c3d0ba 100644
--- a/app/routes/activity/components/components/Modal/Transaction/Transaction.scss
+++ b/app/routes/activity/components/components/Modal/Transaction/Transaction.scss
@@ -1,48 +1,57 @@
@import '../../../../../../variables.scss';
.container {
- padding: 40px;
+ header {
+ padding: 5px 40px 20px 40px;
+ background: $lightgrey;
+
+ .title {
+ display: flex;
+ flex-direction: row;
+
+ h2 {
+ text-transform: uppercase;
+ }
+ }
+ }
h1 {
text-align: center;
color: $main;
- margin: 60px 30px 60px 0;
- svg {
- font-size: 30px;
- vertical-align: top;
+ .value {
+ font-size: 24px;
}
- span svg[data-icon='ltc'] {
- width: 30px;
- height: 30px;
+ i {
+ margin-left: 2px;
vertical-align: top;
-
- g {
- transform: scale(1.75) translate(-5px, -5px);
- }
- }
-
- .value {
- font-size: 75px;
}
}
h3 {
font-size: 14px;
text-align: center;
- color: $black;
- font-weight: bold;
+ color: $darkestgrey;
+ cursor: pointer;
+
+ &:hover {
+ text-decoration: underline;
+ }
}
h2 {
text-align: center;
+ margin-right: 10px;
margin-bottom: 30px;
text-transform: uppercase;
- letter-spacing: 1.5px;
font-size: 24px;
}
+ dl {
+ padding: 40px 40px 40px 40px;
+ }
+
dt {
text-align: left;
float: left;
@@ -56,8 +65,8 @@
dd {
text-align: right;
font-weight: 400;
- padding: 19px 0;
+ padding: 30px 0 10px 0;
margin-left: 0;
- border-top: 1px solid $darkgrey;
+ border-bottom: 1px solid $darkgrey;
}
-}
\ No newline at end of file
+}
diff --git a/app/routes/app/components/App.js b/app/routes/app/components/App.js
index e11c1202..ce737c94 100644
--- a/app/routes/app/components/App.js
+++ b/app/routes/app/components/App.js
@@ -13,7 +13,7 @@ class App extends Component {
fetchTicker()
fetchInfo()
- newAddress('p2pkh')
+ newAddress('np2wkh')
}
render() {
diff --git a/app/routes/channels/components/Channels.js b/app/routes/channels/components/Channels.js
index 4c68986d..8a086aac 100644
--- a/app/routes/channels/components/Channels.js
+++ b/app/routes/channels/components/Channels.js
@@ -22,7 +22,7 @@ class Channels extends Component {
componentWillMount() {
const { fetchChannels, fetchPeers } = this.props
-
+
fetchChannels()
fetchPeers()
}
@@ -64,7 +64,7 @@ class Channels extends Component {
fetchChannels()
// wait for the svg to appear as child
- const svgTimeout = setTimeout(() => {
+ const svgTimeout = setTimeout(() => {
if (icon[0].tagName === 'svg') {
// spin icon for 1 sec
icon[0].style.animation = 'spin 1000ms linear 1'
@@ -73,7 +73,7 @@ class Channels extends Component {
}, 1)
// clear animation after the second so we can reuse it
- const refreshTimeout = setTimeout(() => {
+ const refreshTimeout = setTimeout(() => {
icon[0].style.animation = ''
this.setState({ refreshing: false })
clearTimeout(refreshTimeout)
@@ -96,7 +96,7 @@ class Channels extends Component {
-
+
@@ -187,7 +187,7 @@ Channels.propTypes = {
channels: PropTypes.object.isRequired,
currentChannels: PropTypes.array.isRequired,
nonActiveFilters: PropTypes.array.isRequired,
-
+
updateChannelSearchQuery: PropTypes.func.isRequired,
setCurrentChannel: PropTypes.func.isRequired,
openChannelForm: PropTypes.func.isRequired,
diff --git a/app/routes/peers/components/Peers.js b/app/routes/peers/components/Peers.js
index c8ab1c61..e7d10d66 100644
--- a/app/routes/peers/components/Peers.js
+++ b/app/routes/peers/components/Peers.js
@@ -24,7 +24,7 @@ class Peers extends Component {
}
render() {
- const {
+ const {
fetchPeers,
peerFormProps,
setPeerForm,
diff --git a/app/store/configureStore.dev.js b/app/store/configureStore.dev.js
index b3b41237..cf0d4004 100644
--- a/app/store/configureStore.dev.js
+++ b/app/store/configureStore.dev.js
@@ -6,31 +6,31 @@ import { createLogger } from 'redux-logger'
import rootReducer from '../reducers'
import ipc from '../reducers/ipc'
-const history = createHashHistory();
+const history = createHashHistory()
const configureStore = (initialState?: counterStateType) => {
// Redux Configuration
- const middleware = [];
- const enhancers = [];
+ const middleware = []
+ const enhancers = []
// Thunk Middleware
- middleware.push(thunk);
+ middleware.push(thunk)
// Logging Middleware
const logger = createLogger({
level: 'info',
collapsed: true
- });
- middleware.push(logger);
+ })
+ middleware.push(logger)
// Router Middleware
- const router = routerMiddleware(history);
- middleware.push(router);
+ const router = routerMiddleware(history)
+ middleware.push(router)
// Redux DevTools Configuration
const actionCreators = {
...routerActions
- };
+ }
// If Redux DevTools Extension is installed use it, otherwise use Redux compose
/* eslint-disable no-underscore-dangle */
const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__
@@ -38,23 +38,23 @@ const configureStore = (initialState?: counterStateType) => {
// Options: http://zalmoxisus.github.io/redux-devtools-extension/API/Arguments.html
actionCreators
})
- : compose;
+ : compose
/* eslint-enable no-underscore-dangle */
// Apply Middleware & Compose Enhancers
- enhancers.push(applyMiddleware(...middleware, ipc));
- const enhancer = composeEnhancers(...enhancers);
+ enhancers.push(applyMiddleware(...middleware, ipc))
+ const enhancer = composeEnhancers(...enhancers)
// Create Store
- const store = createStore(rootReducer, initialState, enhancer);
+ const store = createStore(rootReducer, initialState, enhancer)
if (module.hot) {
module.hot.accept('../reducers', () =>
store.replaceReducer(require('../reducers')) // eslint-disable-line global-require
- );
+ )
}
- return store;
-};
+ return store
+}
-export default { configureStore, history };
+export default { configureStore, history }
diff --git a/app/store/configureStore.js b/app/store/configureStore.js
index d0398248..d69e8426 100644
--- a/app/store/configureStore.js
+++ b/app/store/configureStore.js
@@ -1,6 +1,6 @@
// @flow
if (process.env.NODE_ENV === 'production') {
- module.exports = require('./configureStore.prod'); // eslint-disable-line global-require
+ module.exports = require('./configureStore.prod') // eslint-disable-line global-require
} else {
- module.exports = require('./configureStore.dev'); // eslint-disable-line global-require
+ module.exports = require('./configureStore.dev') // eslint-disable-line global-require
}
diff --git a/app/yarn.lock b/app/yarn.lock
index 41c79b2f..42fe3766 100644
--- a/app/yarn.lock
+++ b/app/yarn.lock
@@ -190,6 +190,10 @@ delegates@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
+detect-libc@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
+
ecc-jsbn@~0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505"
@@ -289,15 +293,15 @@ graceful-fs@^4.1.2:
version "4.1.11"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
-grpc@^1.6.6:
- version "1.6.6"
- resolved "https://registry.yarnpkg.com/grpc/-/grpc-1.6.6.tgz#2051784f6bd6134681fa2c4b5e75dc82c6c23ffa"
+grpc@^1.7.3:
+ version "1.7.3"
+ resolved "https://registry.yarnpkg.com/grpc/-/grpc-1.7.3.tgz#c9d034324e2ec8a06cfaa577a044a116f96c8c90"
dependencies:
arguejs "^0.2.3"
- lodash "^4.17.4"
- nan "^2.7.0"
- node-pre-gyp "^0.6.38"
- protobufjs "^5.0.2"
+ lodash "^4.15.0"
+ nan "^2.0.0"
+ node-pre-gyp "^0.6.39"
+ protobufjs "^5.0.0"
har-schema@^1.0.5:
version "1.0.5"
@@ -428,7 +432,7 @@ lcid@^1.0.0:
dependencies:
invert-kv "^1.0.0"
-lodash@^4.17.4:
+lodash@^4.15.0:
version "4.17.4"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
@@ -476,9 +480,9 @@ ms@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
-nan@^2.7.0:
- version "2.7.0"
- resolved "https://registry.yarnpkg.com/nan/-/nan-2.7.0.tgz#d95bf721ec877e08db276ed3fc6eb78f9083ad46"
+nan@^2.0.0:
+ version "2.8.0"
+ resolved "https://registry.yarnpkg.com/nan/-/nan-2.8.0.tgz#ed715f3fe9de02b57a5e6252d90a96675e1f085a"
node-fetch@^1.0.1:
version "1.7.2"
@@ -487,10 +491,11 @@ node-fetch@^1.0.1:
encoding "^0.1.11"
is-stream "^1.0.1"
-node-pre-gyp@^0.6.38:
- version "0.6.38"
- resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.38.tgz#e92a20f83416415bb4086f6d1fb78b3da73d113d"
+node-pre-gyp@^0.6.39:
+ version "0.6.39"
+ resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649"
dependencies:
+ detect-libc "^1.0.2"
hawk "3.1.3"
mkdirp "^0.5.1"
nopt "^4.0.1"
@@ -585,7 +590,7 @@ prop-types@15.5.8:
dependencies:
fbjs "^0.8.9"
-protobufjs@^5.0.2:
+protobufjs@^5.0.0:
version "5.0.2"
resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-5.0.2.tgz#59748d7dcf03d2db22c13da9feb024e16ab80c91"
dependencies:
diff --git a/internals/mocks/fileMock.js b/internals/mocks/fileMock.js
index 602eb23e..2b9e53d9 100644
--- a/internals/mocks/fileMock.js
+++ b/internals/mocks/fileMock.js
@@ -1 +1 @@
-export default 'test-file-stub';
+export default 'test-file-stub'
diff --git a/internals/scripts/CheckBuiltsExist.js b/internals/scripts/CheckBuiltsExist.js
index 4acb6a2a..99ba4985 100644
--- a/internals/scripts/CheckBuiltsExist.js
+++ b/internals/scripts/CheckBuiltsExist.js
@@ -1,24 +1,24 @@
// @flow
// Check if the renderer and main bundles are built
-import path from 'path';
-import chalk from 'chalk';
-import fs from 'fs';
+import path from 'path'
+import chalk from 'chalk'
+import fs from 'fs'
function CheckBuildsExist() {
- const mainPath = path.join(__dirname, '..', '..', 'app', 'main.prod.js');
- const rendererPath = path.join(__dirname, '..', '..', 'app', 'dist', 'renderer.prod.js');
+ const mainPath = path.join(__dirname, '..', '..', 'app', 'main.prod.js')
+ const rendererPath = path.join(__dirname, '..', '..', 'app', 'dist', 'renderer.prod.js')
if (!fs.existsSync(mainPath)) {
throw new Error(chalk.whiteBright.bgRed.bold(
'The main process is not built yet. Build it by running "npm run build-main"'
- ));
+ ))
}
if (!fs.existsSync(rendererPath)) {
throw new Error(chalk.whiteBright.bgRed.bold(
'The renderer process is not built yet. Build it by running "npm run build-renderer"'
- ));
+ ))
}
}
-CheckBuildsExist();
+CheckBuildsExist()
diff --git a/internals/scripts/CheckNodeEnv.js b/internals/scripts/CheckNodeEnv.js
index 2ef3f91d..23df8a81 100644
--- a/internals/scripts/CheckNodeEnv.js
+++ b/internals/scripts/CheckNodeEnv.js
@@ -1,17 +1,17 @@
// @flow
-import chalk from 'chalk';
+import chalk from 'chalk'
export default function CheckNodeEnv(expectedEnv: string) {
if (!expectedEnv) {
- throw new Error('"expectedEnv" not set');
+ throw new Error('"expectedEnv" not set')
}
if (process.env.NODE_ENV !== expectedEnv) {
/* eslint-disable */
console.log(chalk.whiteBright.bgRed.bold(
`"process.env.NODE_ENV" must be "${expectedEnv}" to use this webpack config`
- ));
+ ))
/* eslint-enable */
- process.exit(2);
+ process.exit(2)
}
}
diff --git a/package.json b/package.json
index d41cfb98..e325ab72 100644
--- a/package.json
+++ b/package.json
@@ -143,7 +143,7 @@
"css-loader": "^0.28.3",
"electron": "^1.6.10",
"electron-builder": "^19.8.0",
- "electron-devtools-installer": "^2.2.0",
+ "electron-devtools-installer": "^2.2.1",
"enzyme": "^2.9.1",
"enzyme-to-json": "^1.5.1",
"eslint": "^4.4.1",
diff --git a/resources/bin/darwin/lnd b/resources/bin/darwin/lnd
deleted file mode 100755
index 28931478..00000000
Binary files a/resources/bin/darwin/lnd and /dev/null differ
diff --git a/test/components/Nav.spec.js b/test/components/Nav.spec.js
index 7f98da30..86dbf88e 100644
--- a/test/components/Nav.spec.js
+++ b/test/components/Nav.spec.js
@@ -21,9 +21,8 @@ describe('default elements', () => {
it('should render nav links', () => {
expect(el.find(NavLink).at(0).props().to).toBe('/')
- expect(el.find(NavLink).at(1).props().to).toBe('/wallet')
+ expect(el.find(NavLink).at(1).props().to).toBe('/peers')
expect(el.find(NavLink).at(2).props().to).toBe('/channels')
- expect(el.find(NavLink).at(3).props().to).toBe('/settings')
})
it('should render buttons', () => {
expect(el.find('.button').at(0).text()).toContain('Pay')
diff --git a/test/example.js b/test/example.js
index e73ab5b9..f07b9a6c 100644
--- a/test/example.js
+++ b/test/example.js
@@ -1,5 +1,5 @@
describe('description', () => {
it('should have description', () => {
- expect(1 + 2).toBe(3);
- });
-});
+ expect(1 + 2).toBe(3)
+ })
+})
diff --git a/test/reducers/__snapshots__/peers.spec.js.snap b/test/reducers/__snapshots__/peers.spec.js.snap
index ca6d78c3..69bcafdd 100644
--- a/test/reducers/__snapshots__/peers.spec.js.snap
+++ b/test/reducers/__snapshots__/peers.spec.js.snap
@@ -12,6 +12,7 @@ Object {
},
"peers": Array [],
"peersLoading": false,
+ "searchQuery": "",
}
`;
@@ -27,6 +28,7 @@ Object {
},
"peers": Array [],
"peersLoading": false,
+ "searchQuery": "",
}
`;
@@ -44,6 +46,7 @@ Object {
"foo",
],
"peersLoading": false,
+ "searchQuery": "",
}
`;
@@ -59,6 +62,7 @@ Object {
},
"peers": Array [],
"peersLoading": false,
+ "searchQuery": "",
}
`;
@@ -74,6 +78,7 @@ Object {
},
"peers": Array [],
"peersLoading": false,
+ "searchQuery": "",
}
`;
@@ -89,6 +94,7 @@ Object {
},
"peers": Array [],
"peersLoading": false,
+ "searchQuery": "",
}
`;
@@ -104,6 +110,7 @@ Object {
},
"peers": Array [],
"peersLoading": true,
+ "searchQuery": "",
}
`;
@@ -119,6 +126,7 @@ Object {
},
"peers": "foo",
"peersLoading": false,
+ "searchQuery": "",
}
`;
@@ -134,6 +142,7 @@ Object {
},
"peers": Array [],
"peersLoading": false,
+ "searchQuery": "",
}
`;
@@ -152,6 +161,7 @@ Object {
},
"peers": Array [],
"peersLoading": false,
+ "searchQuery": "",
}
`;
@@ -167,5 +177,6 @@ Object {
},
"peers": Array [],
"peersLoading": false,
+ "searchQuery": "",
}
`;
diff --git a/test/runTests.js b/test/runTests.js
index 5465e636..97863a50 100644
--- a/test/runTests.js
+++ b/test/runTests.js
@@ -1,11 +1,11 @@
-const spawn = require('cross-spawn');
-const path = require('path');
+const spawn = require('cross-spawn')
+const path = require('path')
-const s = `\\${path.sep}`;
+const s = `\\${path.sep}`
const pattern = process.argv[2] === 'e2e'
? `test${s}e2e${s}.+\\.spec\\.js`
- : `test${s}(?!e2e${s})[^${s}]+${s}.+\\.spec\\.js$`;
+ : `test${s}(?!e2e${s})[^${s}]+${s}.+\\.spec\\.js$`
-const result = spawn.sync(path.normalize('./node_modules/.bin/jest'), [pattern], { stdio: 'inherit' });
+const result = spawn.sync(path.normalize('./node_modules/.bin/jest'), [pattern], { stdio: 'inherit' })
-process.exit(result.status);
+process.exit(result.status)
diff --git a/webpack.config.base.js b/webpack.config.base.js
index b45da850..d586d474 100644
--- a/webpack.config.base.js
+++ b/webpack.config.base.js
@@ -2,9 +2,9 @@
* Base webpack config used across other specific configs
*/
-import path from 'path';
-import webpack from 'webpack';
-import { dependencies as externals } from './app/package.json';
+import path from 'path'
+import webpack from 'webpack'
+import { dependencies as externals } from './app/package.json'
export default {
externals: Object.keys(externals || {}),
diff --git a/webpack.config.eslint.js b/webpack.config.eslint.js
index 8bf84424..d448e412 100644
--- a/webpack.config.eslint.js
+++ b/webpack.config.eslint.js
@@ -1,3 +1,3 @@
-require('babel-register');
+require('babel-register')
-module.exports = require('./webpack.config.renderer.dev');
+module.exports = require('./webpack.config.renderer.dev')
diff --git a/webpack.config.main.prod.js b/webpack.config.main.prod.js
index 641ecce2..77187c58 100644
--- a/webpack.config.main.prod.js
+++ b/webpack.config.main.prod.js
@@ -2,14 +2,14 @@
* Webpack config for production electron main process
*/
-import webpack from 'webpack';
-import merge from 'webpack-merge';
-import BabiliPlugin from 'babili-webpack-plugin';
-import { BundleAnalyzerPlugin } from 'webpack-bundle-analyzer';
-import baseConfig from './webpack.config.base';
-import CheckNodeEnv from './internals/scripts/CheckNodeEnv';
+import webpack from 'webpack'
+import merge from 'webpack-merge'
+import BabiliPlugin from 'babili-webpack-plugin'
+import { BundleAnalyzerPlugin } from 'webpack-bundle-analyzer'
+import baseConfig from './webpack.config.base'
+import CheckNodeEnv from './internals/scripts/CheckNodeEnv'
-CheckNodeEnv('production');
+CheckNodeEnv('production')
export default merge.smart(baseConfig, {
devtool: 'source-map',
@@ -59,4 +59,4 @@ export default merge.smart(baseConfig, {
__dirname: false,
__filename: false
}
-});
+})
diff --git a/webpack.config.renderer.dev.dll.js b/webpack.config.renderer.dev.dll.js
index f98033a8..a7cd1182 100644
--- a/webpack.config.renderer.dev.dll.js
+++ b/webpack.config.renderer.dev.dll.js
@@ -2,16 +2,16 @@
* Builds the DLL for development electron renderer process
*/
-import webpack from 'webpack';
-import path from 'path';
-import merge from 'webpack-merge';
-import baseConfig from './webpack.config.base';
-import { dependencies } from './package.json';
-import CheckNodeEnv from './internals/scripts/CheckNodeEnv';
+import webpack from 'webpack'
+import path from 'path'
+import merge from 'webpack-merge'
+import baseConfig from './webpack.config.base'
+import { dependencies } from './package.json'
+import CheckNodeEnv from './internals/scripts/CheckNodeEnv'
-CheckNodeEnv('development');
+CheckNodeEnv('development')
-const dist = path.resolve(process.cwd(), 'dll');
+const dist = path.resolve(process.cwd(), 'dll')
export default merge.smart(baseConfig, {
context: process.cwd(),
@@ -205,4 +205,4 @@ export default merge.smart(baseConfig, {
}
})
]
-});
+})
diff --git a/webpack.config.renderer.prod.js b/webpack.config.renderer.prod.js
index 190afa7d..1f43659e 100644
--- a/webpack.config.renderer.prod.js
+++ b/webpack.config.renderer.prod.js
@@ -2,16 +2,16 @@
* Build config for electron renderer process
*/
-import path from 'path';
-import webpack from 'webpack';
-import ExtractTextPlugin from 'extract-text-webpack-plugin';
-import { BundleAnalyzerPlugin } from 'webpack-bundle-analyzer';
-import merge from 'webpack-merge';
-import BabiliPlugin from 'babili-webpack-plugin';
-import baseConfig from './webpack.config.base';
-import CheckNodeEnv from './internals/scripts/CheckNodeEnv';
+import path from 'path'
+import webpack from 'webpack'
+import ExtractTextPlugin from 'extract-text-webpack-plugin'
+import { BundleAnalyzerPlugin } from 'webpack-bundle-analyzer'
+import merge from 'webpack-merge'
+import BabiliPlugin from 'babili-webpack-plugin'
+import baseConfig from './webpack.config.base'
+import CheckNodeEnv from './internals/scripts/CheckNodeEnv'
-CheckNodeEnv('production');
+CheckNodeEnv('production')
export default merge.smart(baseConfig, {
devtool: 'source-map',
@@ -165,4 +165,4 @@ export default merge.smart(baseConfig, {
openAnalyzer: process.env.OPEN_ANALYZER === 'true'
})
]
-});
+})
diff --git a/yarn.lock b/yarn.lock
index 9c15db2f..02a465c2 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3137,9 +3137,9 @@ electron-debug@^1.2.0:
electron-is-dev "^0.1.0"
electron-localshortcut "^2.0.0"
-electron-devtools-installer@^2.2.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/electron-devtools-installer/-/electron-devtools-installer-2.2.0.tgz#9813e6811afcd69ddca3cae5416db72ea7ecfb6a"
+electron-devtools-installer@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/electron-devtools-installer/-/electron-devtools-installer-2.2.1.tgz#0beb73ccbf65cbc4d09e706cebda638f839b8c55"
dependencies:
"7zip" "0.0.6"
cross-unzip "0.0.2"