From c463afabf435e6d4613ed87c959b8a886b365695 Mon Sep 17 00:00:00 2001 From: pbca26 Date: Sun, 9 Apr 2017 20:21:47 +0300 Subject: [PATCH] dashboard components #4 --- react/package.json | 1 + react/src/actions/actionCreators.js | 191 +++++- react/src/components/app/app.js | 1 + .../src/components/dashboard/coinTileItem.js | 28 +- react/src/components/dashboard/dashboard.js | 8 +- react/src/components/dashboard/receiveCoin.js | 575 ++---------------- react/src/components/dashboard/settings.js | 1 + .../dashboard/walletsBasiliskConnection.js | 76 +++ .../dashboard/walletsBasiliskRefresh.js | 54 +- react/src/components/dashboard/walletsData.js | 35 +- .../src/components/dashboard/walletsNative.js | 556 +++++++++++++++++ .../components/dashboard/walletsProgress.js | 50 +- react/src/reducers/activeCoin.js | 7 +- react/src/reducers/dashboard.js | 31 +- react/src/reducers/index.js | 2 + react/src/reducers/interval.js | 26 + react/src/styles/index.scss | 5 + 17 files changed, 1056 insertions(+), 591 deletions(-) create mode 100644 react/src/components/dashboard/walletsBasiliskConnection.js create mode 100644 react/src/components/dashboard/walletsNative.js create mode 100644 react/src/reducers/interval.js diff --git a/react/package.json b/react/package.json index 7ff5bdc..7eba962 100644 --- a/react/package.json +++ b/react/package.json @@ -33,6 +33,7 @@ "babel-loader": "^6.2.5", "babel-preset-es2015": "^6.14.0", "babel-preset-react": "^6.11.1", + "bluebird": "^3.5.0", "express": "^4.14.0", "file-loader": "^0.10.0", "react": "^15.3.1", diff --git a/react/src/actions/actionCreators.js b/react/src/actions/actionCreators.js index d499b01..be59a17 100644 --- a/react/src/actions/actionCreators.js +++ b/react/src/actions/actionCreators.js @@ -1,4 +1,6 @@ import 'whatwg-fetch'; +import 'bluebird'; + import Config from '../config'; import { startCurrencyAssetChain, startAssetChain, startCrypto, checkCoinType } from '../components/addcoin/payload'; import { copyToClipboard } from '../util/copyToClipboard'; @@ -20,6 +22,57 @@ export const ATOMIC = 'ATOMIC'; export const GET_WIF_KEY = 'GET_WIF_KEY'; export const GET_PEERS_LIST = 'GET_PEERS_LIST'; export const GET_DEBUG_LOG = 'GET_DEBUG_LOG'; +export const BASILISK_REFRESH = 'BASILISK_REFRESH'; +export const BASILISK_CONNECTION = 'BASILISK_CONNECTION'; +export const SYNCING_FULL_MODE = 'SYNCING_FULL_MODE'; +export const SYNCING_NATIVE_MODE = 'SYNCING_NATIVE_MODE'; +export const ACTIVE_COIN_GET_ADDRESSES = 'ACTIVE_COIN_GET_ADDRESSES'; +export const START_INTERVAL= 'START_INTERVAL'; +export const STOP_INTERVAL= 'STOP_INTERVAL'; + +function basiliskConnectionState(display, json) { + return { + type: BASILISK_CONNECTION, + basiliskConnection: display, + progress: json, + } +} + +function basiliskRefreshState(display, json) { + return { + type: BASILISK_REFRESH, + basiliskRefresh: display, + progress: json, + } +} + +export function basiliskRefresh(display) { + return dispatch => { + dispatch(basiliskRefreshState(display)); + } +} + +export function basiliskConnection(display) { + return dispatch => { + dispatch(basiliskConnectionState(display)); + } +} + +export function syncingNativeModeState(display, json) { + return { + type: SYNCING_FULL_MODE, + syncingNativeMode: display, + progress: json, + } +} + +export function syncingFullModeState(display, json) { + return { + type: SYNCING_NATIVE_MODE, + syncingFullMode: display, + progress: json, + } +} function atomicState(json) { return { @@ -390,7 +443,7 @@ export function iguanaActiveHandle(getMainAddress) { }) .catch(function(error) { console.log(error); - dispatch(triggerToaster(true, 'Error iguanaActiveHandle', 'Error', 'error')); + dispatch(triggerToaster(true, translate('TOASTR.IGUANA_ARE_YOU_SURE'), translate('TOASTR.SERVICE_NOTIFICATION'), 'error')); }) .then(response => response.json()) .then(json => dispatch(getMainAddress ? getMainAddressState(json) : iguanaActiveHandleState(json))); @@ -566,6 +619,113 @@ export function addPeerNode(coin, ip) { } } +export function getAddressesByAccountState(json, coin) { + test(['123', '456']); + return { + type: ACTIVE_COIN_GET_ADDRESSES, + addresses: json.result, + } +} + +export function getAddressesByAccount(coin) { + const payload = { + 'userpass': 'tmpIgRPCUser@' + sessionStorage.getItem('IguanaRPCAuth'), + 'coin': coin, + 'agent': 'bitcoinrpc', + 'method': 'getaddressesbyaccount', + 'account': '*' + }; + + return dispatch => { + return fetch('http://127.0.0.1:' + Config.iguanaCorePort, { + method: 'POST', + body: JSON.stringify(payload), + }) + .catch(function(error) { + console.log(error); + dispatch(triggerToaster(true, 'getAddressesByAccount', 'Error', 'error')); + }) + .then(response => response.json()) + .then(json => dispatch(getAddressesByAccountState(json, dispatch))) + } +} + +function getDexNotariesState(json, dispatch) { + return dispatch => { + dispatch(triggerToaster(true, 'Notaries list received', translate('TOASTR.BASILISK_NOTIFICATION'), 'success')); + } +} + +export function getDexNotaries(coin) { + const payload = { + 'userpass': 'tmpIgRPCUser@' + sessionStorage.getItem('IguanaRPCAuth'), + 'agent': 'dex', + 'method': 'getnotaries', + 'symbol': coin + }; + + return dispatch => { + return fetch('http://127.0.0.1:' + Config.iguanaCorePort, { + method: 'POST', + body: JSON.stringify(payload), + }) + .catch(function(error) { + console.log(error); + dispatch(triggerToaster(true, 'getDexNotaries', 'Error', 'error')); + }) + .then(response => response.json()) + .then(json => dispatch(getDexNotariesState(json, dispatch))) + } +} + +export function startInterval(name, handle) { + return { + type: START_INTERVAL, + name, + handle, + } +} + +export function stopInterval(name, intervals) { + clearInterval(intervals[name]); + + return { + type: STOP_INTERVAL, + name, + } +} + +function getSyncInfoState(json) { + return { + type: SYNCING_FULL_MODE, + progress: json, + } +} + +export function getSyncInfo(coin) { + const payload = { + 'userpass': 'tmpIgRPCUser@' + sessionStorage.getItem('IguanaRPCAuth'), + 'coin': coin, + 'agent': 'bitcoinrpc', + 'method': 'getinfo', + 'immediate': 100, + 'timeout': 4000 + }; + + return dispatch => { + return fetch('http://127.0.0.1:' + Config.iguanaCorePort, { + method: 'POST', + body: JSON.stringify(payload), + }) + .catch(function(error) { + console.log(error); + dispatch(triggerToaster(true, 'getSyncInfo', 'Error', 'error')); + }) + .then(response => response.json()) + .then(json => dispatch(getSyncInfoState(json, dispatch))) + } +} + function getDebugLogState(json) { const _data = json.result.replace('\n', '\r\n'); @@ -661,6 +821,35 @@ export function shepherdGetSysInfo() { } } +/*export function test(coin, addr) { + Promise.all(addr.map((_addr, index) => { + const payload = { + 'userpass': 'tmpIgRPCUser@' + sessionStorage.getItem('IguanaRPCAuth'), + 'agent': 'dex', + 'method': 'listunspent', + 'address': _addr, + 'symbol': coin + } + console.log('addr', _addr); + return new Promise((resolve, reject) => { + fetch('http://127.0.0.1:' + Config.iguanaCorePort, { + method: 'POST', + body: JSON.stringify(payload), + }) + .catch(function(error) { + console.log(error); + dispatch(triggerToaster(true, 'getSyncInfo', 'Error', 'error')); + }) + .then(response => response.json()) + .then(json => dispatch(getSyncInfoState(json, dispatch))) + resolve(index); + }); + })) + .then(result => { + console.log(result); + }); +} + /*function Shepherd_SendPendValue() { Shepherd_SysInfo().then(function(result){ var ram_data = formatBytes(result.totalmem_bytes) diff --git a/react/src/components/app/app.js b/react/src/components/app/app.js index b03538f..9c5c998 100644 --- a/react/src/components/app/app.js +++ b/react/src/components/app/app.js @@ -12,6 +12,7 @@ function mapStateToProps(state) { ActiveCoin: state.ActiveCoin, Atomic: state.Atomic, Settings: state.Settings, + Interval: state.Interval, }; } diff --git a/react/src/components/dashboard/coinTileItem.js b/react/src/components/dashboard/coinTileItem.js index a095a71..da9ed9e 100644 --- a/react/src/components/dashboard/coinTileItem.js +++ b/react/src/components/dashboard/coinTileItem.js @@ -1,6 +1,14 @@ import React from 'react'; import { translate } from '../../translate/translate'; -import { dashboardChangeActiveCoin, iguanaActiveHandle } from '../../actions/actionCreators'; +import { + dashboardChangeActiveCoin, + iguanaActiveHandle, + getAddressesByAccount, + getSyncInfo, + startInterval, + stopInterval, + iguanaEdexBalance +} from '../../actions/actionCreators'; import Store from '../../store'; class CoinTileItem extends React.Component { @@ -11,13 +19,29 @@ class CoinTileItem extends React.Component { } dashboardChangeActiveCoin(coin, mode) { + if (mode === 'full' && coin !== this.props.ActiveCoin.coin) { + Store.dispatch(stopInterval('sync', this.props.Interval.interval)); + var _iguanaActiveHandle = setInterval(function() { + Store.dispatch(getSyncInfo(coin)); + }, 3000); + Store.dispatch(startInterval('sync', _iguanaActiveHandle)); + } else { + Store.dispatch(stopInterval('sync', this.props.Interval.interval)); + } + Store.dispatch(dashboardChangeActiveCoin(coin, mode)); Store.dispatch(iguanaActiveHandle(true)); + Store.dispatch(getAddressesByAccount(coin)); + Store.dispatch(iguanaEdexBalance(coin)); + + /*this.setState(Object.assign({}, this.state, { + activeHandleInterval: _iguanaActiveHandle, + }));*/ } render() { const { item } = this.props; - + return (
diff --git a/react/src/components/dashboard/dashboard.js b/react/src/components/dashboard/dashboard.js index 90782db..a129cb7 100644 --- a/react/src/components/dashboard/dashboard.js +++ b/react/src/components/dashboard/dashboard.js @@ -13,6 +13,9 @@ import Jumblr from './jumblr'; import Settings from './settings'; import ReceiveCoin from './receiveCoin'; import About from './about'; +import WalletsBasiliskRefresh from './walletsBasiliskRefresh'; +import WalletsBasiliskConnection from './walletsBasiliskConnection'; +import WalletsNative from './walletsNative'; class Dashboard extends React.Component { constructor(props) { @@ -36,7 +39,10 @@ class Dashboard extends React.Component { - + + + +
diff --git a/react/src/components/dashboard/receiveCoin.js b/react/src/components/dashboard/receiveCoin.js index 973a9f1..efc79ee 100644 --- a/react/src/components/dashboard/receiveCoin.js +++ b/react/src/components/dashboard/receiveCoin.js @@ -2,549 +2,66 @@ import React from 'react'; import { translate } from '../../translate/translate'; class ReceiveCoin extends React.Component { + renderAddressList() { + if (this.props.addresses && this.props.addresses.length) { + return this.props.addresses.map((address) => + + + + {translate('IAPI.PUBLIC_SM')} + + + {address} + + + + ); + } else { + return null; + } + } + render() { - console.log('receiveprops', this.props); if (this.props && this.props.receive) { return ( -
-
- - - - -
-
-
-
- - | - / - | : - -
-
-
-
- -
-
-
-
-
-
-
-
- {translate('INDEX.TRANSPARENT_BALANCE')} -
- - -
-
-
-
-
- -
-
-
-
-
-
- {translate('INDEX.Z_BALANCE')} -
- - -
-
-
-
-
- -
-
-
-
-
-
- {translate('INDEX.INTEREST_EARNED')} -
- - -
-
-
-
-
- -
-
-
-
-
-
- {translate('INDEX.ZT_BALANCE')} -
- - -
-
-
-
-
-
- -
-
-
-
-
-
-
-

{translate('INDEX.TRANSACTION_HISTORY')}

-
-
- - - - - - - - - - - - - - - - - - - - - - - -
{translate('INDEX.TYPE')}{translate('INDEX.DIRECTION')}{translate('INDEX.CONFIRMATIONS')}{translate('INDEX.AMOUNT')}{translate('INDEX.TIME')}{translate('INDEX.DEST_ADDRESS')}{translate('INDEX.TX_DETAIL')}
{translate('INDEX.TYPE')}{translate('INDEX.DIRECTION')}{translate('INDEX.CONFIRMATIONS')}{translate('INDEX.AMOUNT')}{translate('INDEX.TIME')}{translate('INDEX.DEST_ADDRESS')}{translate('INDEX.TX_DETAIL')}
-
-
+
+
+
+
+
+
+
+
-
-
-
-
- -
-
-
-
-
-
-
- -

{translate('INDEX.RECEIVING_ADDRESS')}

-
-
- - - - - - - - - - - - - -
{translate('INDEX.TYPE')}{translate('INDEX.ADDRESS')}
{translate('INDEX.TYPE')}{translate('INDEX.ADDRESS')}
-
-
-
-
-
-
-
- -
-
-
-
-

- {translate('INDEX.SEND')} -

-
-
-
-
-
- - -
-
- - -
-
- - -
-
- - -
-
- - {translate('INDEX.TOTAL')} ( - txfee): 0.000 - -
-
- -
-
-
-
-
-
- -
-
-
-
-
-
-
-
- -
-

{translate('INDEX.OPERATIONS_STATUSES')}

-
-
- - - - - - - - - - - - - - - - - -
{translate('INDEX.STATUS')}ID{translate('INDEX.TIME')}{translate('INDEX.RESULT')}
{translate('INDEX.STATUS')}ID{translate('INDEX.TIME')}{translate('INDEX.RESULT')}
-
-
-
-
-
-
-
-
- -
-
-
-
-

{translate('INDEX.WALLET_INFO')}

-
-
- +

{translate('INDEX.RECEIVING_ADDRESS')}

+ +
+
+ + + + + + + + - - - - - - - - - - - - - - - - - - - - + {this.renderAddressList()} -
{translate('INDEX.TYPE')}{translate('INDEX.ADDRESS')}{translate('INDEX.BALANCE')}{translate('INDEX.INTEREST')}
{translate('INDEX.WALLET_VERSION')} - -
{translate('INDEX.BALANCE')} - -
{translate('INDEX.UNCONFIRMED_BALANCE')} - -
{translate('INDEX.IMMATURE_BALANCE')} - -
{translate('INDEX.TOTAL_TX_COUNT')} - -
-
-
-
- -
-
-
-

- Komodo {translate('INDEX.INFO')} -

-
-
- - - - - - + - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
{translate('INDEX.VERSION')} - -
{translate('INDEX.PROTOCOL_VERSION')} - - {translate('INDEX.TYPE')}{translate('INDEX.ADDRESS')}{translate('INDEX.BALANCE')}{translate('INDEX.INTEREST')}
{translate('INDEX.NOTARIZED')} - -
- {translate('INDEX.NOTARIZED')} Hash - - -
- {translate('INDEX.NOTARIZED')} BTC - - -
{translate('INDEX.BLOCKS')} - -
{translate('INDEX.CONNECTIONS')} - -
{translate('INDEX.DIFFICULTY')} - -
Testnet - -
{translate('INDEX.PAY_TX_FEE')} - -
{translate('INDEX.RELAY_FEE')} - -
{translate('INDEX.ERRORS')} - -
- -
); diff --git a/react/src/components/dashboard/settings.js b/react/src/components/dashboard/settings.js index 6f02e21..20c9bf7 100644 --- a/react/src/components/dashboard/settings.js +++ b/react/src/components/dashboard/settings.js @@ -19,6 +19,7 @@ import AddCoinOptionsACFiat from '../addcoin/addcoinOptionsACFiat'; 1) pre-select active coin in add node tab 2) add agama config section 3) add fiat section + 4) kickstart section */ class Settings extends React.Component { constructor(props) { diff --git a/react/src/components/dashboard/walletsBasiliskConnection.js b/react/src/components/dashboard/walletsBasiliskConnection.js new file mode 100644 index 0000000..823bada --- /dev/null +++ b/react/src/components/dashboard/walletsBasiliskConnection.js @@ -0,0 +1,76 @@ +import React from 'react'; +import { translate } from '../../translate/translate'; + +class WalletsBasiliskConnection extends React.Component { + render() { + if (this.props && this.props.Dashboard.basiliskConnection) { + return ( +
+ +
+
+ ); + } else { + return null; + } + } +} + +export default WalletsBasiliskConnection; diff --git a/react/src/components/dashboard/walletsBasiliskRefresh.js b/react/src/components/dashboard/walletsBasiliskRefresh.js index ce08814..8448ab4 100644 --- a/react/src/components/dashboard/walletsBasiliskRefresh.js +++ b/react/src/components/dashboard/walletsBasiliskRefresh.js @@ -3,36 +3,40 @@ import { translate } from '../../translate/translate'; class WalletsBasiliskRefresh extends React.Component { render() { - return ( -
-
-
-
-
-

{translate('INDEX.FETCHING_BASILISK_DATA')}

-
- + if (this.props && this.props.Dashboard.basiliskRefresh) { + return ( +
+
+
+
+
+

{translate('INDEX.FETCHING_BASILISK_DATA')}

+
+ +
+
+
+ + + + + + + + + + + +
{translate('INDEX.ADDRESS')}{translate('INDEX.LIST_UNSPENT')}{translate('INDEX.LIST_TRANSACTIONS')}{translate('INDEX.GET_BALANCE')}{translate('INDEX.REFRESH')}
-
-
- - - - - - - - - - - -
{translate('INDEX.ADDRESS')}{translate('INDEX.LIST_UNSPENT')}{translate('INDEX.LIST_TRANSACTIONS')}{translate('INDEX.GET_BALANCE')}{translate('INDEX.REFRESH')}
-
- ); + ); + } else { + return null; + } } } diff --git a/react/src/components/dashboard/walletsData.js b/react/src/components/dashboard/walletsData.js index 7fe62fd..b6539c2 100644 --- a/react/src/components/dashboard/walletsData.js +++ b/react/src/components/dashboard/walletsData.js @@ -1,7 +1,7 @@ import React from 'react'; import { translate } from '../../translate/translate'; -/*import { } from '../../actions/actionCreators'; -import Store from '../../store';*/ +import { basiliskRefresh, basiliskConnection, getDexNotaries } from '../../actions/actionCreators'; +import Store from '../../store'; class WalletsData extends React.Component { constructor(props) { @@ -10,6 +10,9 @@ class WalletsData extends React.Component { basiliskActionsMenu: false, }; this.toggleBasiliskActionsMenu = this.toggleBasiliskActionsMenu.bind(this); + this.basiliskRefreshAction = this.basiliskRefreshAction.bind(this); + this.basiliskConnectionAction = this.basiliskConnectionAction.bind(this); + this.getDexNotariesAction = this.getDexNotariesAction.bind(this); } toggleBasiliskActionsMenu() { @@ -18,8 +21,24 @@ class WalletsData extends React.Component { })); } + basiliskRefreshAction() { + if (this.props.Dashboard) { + Store.dispatch(basiliskRefresh(!this.props.Dashboard.basiliskRefresh)); + } + } + + basiliskConnectionAction() { + if (this.props.Dashboard) { + Store.dispatch(basiliskConnection(!this.props.Dashboard.basiliskConnection)); + } + } + + getDexNotariesAction() { + Store.dispatch(getDexNotaries(this.props.ActiveCoin.coin)); + } + render() { - if (this.props && this.props.coin) { + if (this.props && this.props.ActiveCoin && this.props.ActiveCoin.coin) { return (
@@ -28,7 +47,7 @@ class WalletsData extends React.Component {
-
+
@@ -40,22 +59,22 @@ class WalletsData extends React.Component {
  • - + {translate('INDEX.GET_NOTARY_NODES_LIST')}
  • - + {translate('INDEX.REFRESH_BASILISK_CONNECTIONS')}
  • - + {translate('INDEX.FETCH_WALLET_DATA')}
  • - + {translate('INDEX.REFETCH_WALLET_DATA')}
  • diff --git a/react/src/components/dashboard/walletsNative.js b/react/src/components/dashboard/walletsNative.js new file mode 100644 index 0000000..4ead324 --- /dev/null +++ b/react/src/components/dashboard/walletsNative.js @@ -0,0 +1,556 @@ +import React from 'react'; +import { translate } from '../../translate/translate'; + +class WalletsNative extends React.Component { + render() { + if (this.props && this.props.ActiveCoin && this.props.ActiveCoin.mode === 'native') { + return ( +
    +
    + + + + +
    +
    +
    +
    + - | - / - | {translate('INDEX.CONNECTIONS')}: - +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    + {translate('INDEX.TRANSPARENT_BALANCE')} +
    + - +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    + {translate('INDEX.Z_BALANCE')} +
    + - +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    + {translate('INDEX.INTEREST_EARNED')} +
    + - +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    + {translate('INDEX.ZT_BALANCE')} +
    + - +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +

    {translate('INDEX.TRANSACTION_HISTORY')}

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + +
    {translate('INDEX.TYPE')}{translate('INDEX.DIRECTION')}{translate('INDEX.CONFIRMATIONS')}{translate('INDEX.AMOUNT')}{translate('INDEX.TIME')}{translate('INDEX.DEST_ADDRESS')}{translate('INDEX.TX_DETAIL')}
    {translate('INDEX.TYPE')}{translate('INDEX.DIRECTION')}{translate('INDEX.CONFIRMATIONS')}{translate('INDEX.AMOUNT')}{translate('INDEX.TIME')}{translate('INDEX.DEST_ADDRESS')}{translate('INDEX.TX_DETAIL')}
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    + +

    {translate('INDEX.RECEIVING_ADDRESS')}

    +
    +
    + + + + + + + + + + + + + +
    {translate('INDEX.TYPE')}{translate('INDEX.ADDRESS')}
    {translate('INDEX.TYPE')}{translate('INDEX.ADDRESS')}
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +

    + {translate('INDEX.SEND')} +

    +
    +
    +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + {translate('INDEX.TOTAL')} ( - txfee): 0.000 + +
    +
    + +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    + +
    +

    {translate('INDEX.OPERATIONS_STATUSES')}

    +
    +
    + + + + + + + + + + + + + + + + + +
    {translate('INDEX.STATUS')}ID{translate('INDEX.TIME')}{translate('INDEX.RESULT')}
    {translate('INDEX.STATUS')}ID{translate('INDEX.TIME')}{translate('INDEX.RESULT')}
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +

    {translate('INDEX.WALLET_INFO')}

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + +
    {translate('INDEX.WALLET_VERSION')} + +
    {translate('INDEX.BALANCE')} + +
    {translate('INDEX.UNCONFIRMED_BALANCE')} + +
    {translate('INDEX.IMMATURE_BALANCE')} + +
    {translate('INDEX.TOTAL_TX_COUNT')} + +
    +
    +
    +
    + +
    +
    +
    +

    + Komodo {translate('INDEX.INFO')} +

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    {translate('INDEX.VERSION')} + +
    {translate('INDEX.PROTOCOL_VERSION')} + +
    {translate('INDEX.NOTARIZED')} + +
    + {translate('INDEX.NOTARIZED')} Hash + + +
    + {translate('INDEX.NOTARIZED')} BTC + + +
    {translate('INDEX.BLOCKS')} + +
    {translate('INDEX.CONNECTIONS')} + +
    {translate('INDEX.DIFFICULTY')} + +
    Testnet + +
    {translate('INDEX.PAY_TX_FEE')} + +
    {translate('INDEX.RELAY_FEE')} + +
    {translate('INDEX.ERRORS')} + +
    +
    +
    +
    +
    +
    + + +
    +
    + ); + } else { + return null; + } + } +} + +export default WalletsNative; diff --git a/react/src/components/dashboard/walletsProgress.js b/react/src/components/dashboard/walletsProgress.js index 5779c9f..477ae97 100644 --- a/react/src/components/dashboard/walletsProgress.js +++ b/react/src/components/dashboard/walletsProgress.js @@ -3,37 +3,41 @@ import { translate } from '../../translate/translate'; class WalletsProgress extends React.Component { render() { - if (this.props && this.props.ActiveCoin && this.props.ActiveCoin.mode === 'full') { - return ( -