Browse Source

Merge pull request #124 from SuperNETorg/es6-conv

Es6 conv
all-modes
pbca26 8 years ago
committed by GitHub
parent
commit
f45b0d034e
  1. 25
      react/src/actions/addCoin.js
  2. 70
      react/src/actions/addressBalance.js
  3. 4
      react/src/actions/atomic.js
  4. 38
      react/src/actions/basiliskCache.js
  5. 12
      react/src/actions/basiliskProcessAddress.js
  6. 2
      react/src/actions/basiliskTxHistory.js
  7. 4
      react/src/actions/coinList.js
  8. 6
      react/src/actions/createWallet.js
  9. 6
      react/src/actions/dexCoins.js
  10. 12
      react/src/actions/edexBalance.js
  11. 8
      react/src/actions/edexGetTx.js
  12. 6
      react/src/actions/fullTxHistory.js
  13. 6
      react/src/actions/getAddrByAccount.js
  14. 6
      react/src/actions/iguanaHelpers.js
  15. 6
      react/src/actions/iguanaInstance.js
  16. 4
      react/src/actions/log.js
  17. 6
      react/src/actions/logout.js
  18. 8
      react/src/actions/nativeBalance.js
  19. 16
      react/src/actions/nativeNewAddress.js
  20. 55
      react/src/actions/nativeSend.js
  21. 10
      react/src/actions/nativeSyncInfo.js
  22. 8
      react/src/actions/nativeTxHistory.js
  23. 20
      react/src/actions/notary.js
  24. 31
      react/src/actions/sendFullBasilisk.js
  25. 28
      react/src/actions/settings.js
  26. 6
      react/src/actions/syncInfo.js
  27. 4
      react/src/actions/syncOnly.js
  28. 2
      react/src/actions/sysInfo.js
  29. 24
      react/src/actions/walletAuth.js
  30. 10
      react/src/components/addcoin/addcoin.js
  31. 22
      react/src/components/addcoin/payload.js
  32. 2
      react/src/components/dashboard/atomic.js
  33. 315
      react/src/components/dashboard/coinTile.js
  34. 35
      react/src/components/dashboard/coinTileItem.js
  35. 11
      react/src/components/dashboard/sendCoin.js
  36. 5
      react/src/components/dashboard/settings.js
  37. 108
      react/src/components/dashboard/syncOnly.js
  38. 4
      react/src/components/dashboard/walletsBasiliskConnection.js
  39. 10
      react/src/components/dashboard/walletsData.js
  40. 4
      react/src/components/dashboard/walletsHeader.js
  41. 4
      react/src/components/dashboard/walletsNative.js
  42. 56
      react/src/components/dashboard/walletsNativeSend.js
  43. 2
      react/src/components/dashboard/walletsNativeSyncProgress.js
  44. 2
      react/src/components/dashboard/walletsNativeTxHistory.js
  45. 31
      react/src/components/login/login.js
  46. 4
      react/src/components/main/main.js
  47. 12
      react/src/components/toaster/toaster-item.js
  48. 40
      react/src/components/toaster/toaster.js
  49. 13
      react/src/styles/index.scss
  50. 316
      react/src/util/coinHelper.js

25
react/src/actions/addCoin.js

@ -4,7 +4,8 @@ import {
triggerToaster, triggerToaster,
Config, Config,
toggleAddcoinModal, toggleAddcoinModal,
getDexCoins getDexCoins,
startIguanaInstance
} from './actionCreators'; } from './actionCreators';
import { import {
logGuiHttp, logGuiHttp,
@ -49,10 +50,10 @@ export function addCoin(coin, mode, syncOnly, port) {
}; };
return dispatch => { return dispatch => {
startIguanaInstance(modeToValue[mode] + '/sync', coin) startIguanaInstance(`${modeToValue[mode]}/sync`, coin)
.then(function(json) { .then(function(json) {
setTimeout(function() { setTimeout(function() {
console.log('started ' + coin + ' / ' + modeToValue[mode] + ' fork', json); console.log(`started ${coin} / ${modeToValue[mode]} fork`, json);
dispatch(iguanaAddCoin(coin, mode, _acData, json.result)); dispatch(iguanaAddCoin(coin, mode, _acData, json.result));
}, 2000); }, 2000);
}); });
@ -79,12 +80,12 @@ export function iguanaAddCoin(coin, mode, acData, port) {
'timestamp': _timestamp, 'timestamp': _timestamp,
'function': 'iguanaAddCoin', 'function': 'iguanaAddCoin',
'type': 'post', 'type': 'post',
'url': 'http://127.0.0.1:' + (port ? port : Config.iguanaCorePort), 'url': `http://127.0.0.1:${(port ? port : Config.iguanaCorePort)}`,
'payload': acData, 'payload': acData,
'status': 'pending', 'status': 'pending',
})); }));
return fetch('http://127.0.0.1:' + (port ? port : Config.iguanaCorePort), { return fetch(`http://127.0.0.1:${(port ? port : Config.iguanaCorePort)}`, {
method: 'POST', method: 'POST',
body: JSON.stringify(acData), body: JSON.stringify(acData),
}) })
@ -126,7 +127,7 @@ export function shepherdHerd(coin, mode, path) {
'ac_options': [ 'ac_options': [
'-daemon=0', '-daemon=0',
'-server', '-server',
'-ac_name=' + coin, `-ac_name=${coin}`,
'-addnode=78.47.196.146' '-addnode=78.47.196.146'
] ]
}; };
@ -160,12 +161,12 @@ export function shepherdHerd(coin, mode, path) {
if (checkCoinType(coin) === 'ac') { if (checkCoinType(coin) === 'ac') {
acData = startAssetChain(path.result, coin, mode); acData = startAssetChain(path.result, coin, mode);
const supply = startAssetChain(path.result, coin, mode, true); const supply = startAssetChain(path.result, coin, mode, true);
herdData.ac_options.push('-ac_supply=' + supply); herdData.ac_options.push(`-ac_supply=${supply}`);
} }
console.log('herdData', herdData); console.log('herdData', herdData);
return dispatch => { return dispatch => {
return fetch('http://127.0.0.1:' + Config.agamaPort + '/shepherd/herd', { return fetch(`http://127.0.0.1:${Config.agamaPort}/shepherd/herd`, {
method: 'POST', method: 'POST',
headers: { headers: {
'Content-Type': 'application/json', 'Content-Type': 'application/json',
@ -192,7 +193,7 @@ export function addCoinResult(coin, mode) {
}; };
return dispatch => { return dispatch => {
dispatch(triggerToaster(true, coin + ' ' + translate('TOASTR.STARTED_IN') + ' ' + modeToValue[mode] + ' ' + translate('TOASTR.MODE'), translate('TOASTR.COIN_NOTIFICATION'), 'success')); dispatch(triggerToaster(true, `${coin} ${translate('TOASTR.STARTED_IN')} ${modeToValue[mode]} ${translate('TOASTR.MODE')}`, translate('TOASTR.COIN_NOTIFICATION'), 'success'));
dispatch(toggleAddcoinModal(false, false)); dispatch(toggleAddcoinModal(false, false));
dispatch(getDexCoins()); dispatch(getDexCoins());
} }
@ -200,7 +201,7 @@ export function addCoinResult(coin, mode) {
export function _shepherdGetConfig(coin, mode) { export function _shepherdGetConfig(coin, mode) {
return dispatch => { return dispatch => {
return fetch('http://127.0.0.1:' + Config.agamaPort + '/shepherd/getconf', { return fetch(`http://127.0.0.1:${Config.agamaPort}/shepherd/getconf`, {
method: 'POST', method: 'POST',
headers: { headers: {
'Content-Type': 'application/json', 'Content-Type': 'application/json',
@ -220,7 +221,7 @@ export function shepherdGetConfig(coin, mode) {
if (coin === 'KMD' && if (coin === 'KMD' &&
mode === '-1') { mode === '-1') {
return dispatch => { return dispatch => {
return fetch('http://127.0.0.1:' + Config.agamaPort + '/shepherd/getconf', { return fetch(`http://127.0.0.1:${Config.agamaPort}/shepherd/getconf`, {
method: 'POST', method: 'POST',
headers: { headers: {
'Content-Type': 'application/json', 'Content-Type': 'application/json',
@ -236,7 +237,7 @@ export function shepherdGetConfig(coin, mode) {
} }
} else { } else {
return dispatch => { return dispatch => {
return fetch('http://127.0.0.1:' + Config.agamaPort + '/shepherd/getconf', { return fetch(`http://127.0.0.1:${Config.agamaPort}/shepherd/getconf`, {
method: 'POST', method: 'POST',
headers: { headers: {
'Content-Type': 'application/json', 'Content-Type': 'application/json',

70
react/src/actions/addressBalance.js

@ -28,43 +28,43 @@ export function getKMDAddressesNative(coin, mode, currentAddress) {
Promise.all(type.map((_type, index) => { Promise.all(type.map((_type, index) => {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
let payload, let payload,
ajax_data_to_hex = '', ajaxFunctionInput = '',
ajax_function_input = '', tmplistaddrHexInput = '',
tmplistaddr_hex_input = '', passthruAgent = getPassthruAgent(coin),
passthru_agent = getPassthruAgent(coin), tmpIguanaRPCAuth = `tmpIgRPCUser@${sessionStorage.getItem('IguanaRPCAuth')}`;
tmpIguanaRPCAuth = 'tmpIgRPCUser@' + sessionStorage.getItem('IguanaRPCAuth');
if (_type === 'public') { if (_type === 'public') {
ajax_function_input = 'getaddressesbyaccount'; ajaxFunctionInput = 'getaddressesbyaccount';
tmplistaddr_hex_input = '222200'; tmplistaddrHexInput = '222200';
} }
if (_type === 'private') { if (_type === 'private') {
ajax_function_input = 'z_listaddresses'; ajaxFunctionInput = 'z_listaddresses';
tmplistaddr_hex_input = ''; tmplistaddrHexInput = '';
} }
if (passthru_agent === 'iguana') { if (passthruAgent === 'iguana') {
payload = { payload = {
'userpass': tmpIguanaRPCAuth, 'userpass': tmpIguanaRPCAuth,
'agent': passthru_agent, 'agent': passthruAgent,
'method': 'passthru', 'method': 'passthru',
'asset': coin, 'asset': coin,
'function': ajax_function_input, 'function': ajaxFunctionInput,
'hex': tmplistaddr_hex_input, 'hex': tmplistaddrHexInput,
}; };
} else { } else {
payload = { payload = {
'userpass': tmpIguanaRPCAuth, 'userpass': tmpIguanaRPCAuth,
'agent': passthru_agent, 'agent': passthruAgent,
'method': 'passthru', 'method': 'passthru',
'function': ajax_function_input, 'function': ajaxFunctionInput,
'hex': tmplistaddr_hex_input, 'hex': tmplistaddrHexInput,
}; };
} }
if (mode === 'full' || mode === 'basilisk') { if (mode === 'full' ||
mode === 'basilisk') {
payload = { payload = {
'userpass': 'tmpIgRPCUser@' + sessionStorage.getItem('IguanaRPCAuth'), 'userpass': `tmpIgRPCUser@${sessionStorage.getItem('IguanaRPCAuth')}`,
'coin': coin, 'coin': coin,
'agent': 'bitcoinrpc', 'agent': 'bitcoinrpc',
'method': 'getaddressesbyaccount', 'method': 'getaddressesbyaccount',
@ -75,7 +75,7 @@ export function getKMDAddressesNative(coin, mode, currentAddress) {
if (mode === 'basilisk') { if (mode === 'basilisk') {
const pubkey = JSON.parse(sessionStorage.getItem('IguanaActiveAccount')).pubkey; const pubkey = JSON.parse(sessionStorage.getItem('IguanaActiveAccount')).pubkey;
fetch('http://127.0.0.1:' + Config.agamaPort + '/shepherd/cache?pubkey=' + pubkey, { fetch(`http://127.0.0.1:${Config.agamaPort}/shepherd/cache?pubkey=${pubkey}`, {
method: 'GET', method: 'GET',
headers: { headers: {
'Content-Type': 'application/json', 'Content-Type': 'application/json',
@ -99,12 +99,12 @@ export function getKMDAddressesNative(coin, mode, currentAddress) {
'timestamp': _timestamp, 'timestamp': _timestamp,
'function': 'getKMDAddressesNative', 'function': 'getKMDAddressesNative',
'type': 'post', 'type': 'post',
'url': 'http://127.0.0.1:' + Config.iguanaCorePort, 'url': `http://127.0.0.1:${Config.iguanaCorePort}`,
'payload': payload, 'payload': payload,
'status': 'pending', 'status': 'pending',
})); }));
fetch('http://127.0.0.1:' + Config.iguanaCorePort, { fetch(`http://127.0.0.1:${Config.iguanaCorePort}`, {
method: 'POST', method: 'POST',
body: JSON.stringify(payload), body: JSON.stringify(payload),
}) })
@ -131,14 +131,14 @@ export function getKMDAddressesNative(coin, mode, currentAddress) {
})) }))
.then(result => { .then(result => {
// TODO: split into 2 functions // TODO: split into 2 functions
const passthru_agent = getPassthruAgent(coin), const passthruAgent = getPassthruAgent(coin),
tmpIguanaRPCAuth = 'tmpIgRPCUser@' + sessionStorage.getItem('IguanaRPCAuth'); tmpIguanaRPCAuth = `tmpIgRPCUser@${sessionStorage.getItem('IguanaRPCAuth')}`;
let payload; let payload;
if (passthru_agent === 'iguana') { if (passthruAgent === 'iguana') {
payload = { payload = {
'userpass': 'tmpIgRPCUser@' + sessionStorage.getItem('IguanaRPCAuth'), 'userpass': `tmpIgRPCUser@${sessionStorage.getItem('IguanaRPCAuth')}`,
'agent': passthru_agent, 'agent': passthruAgent,
'method': 'passthru', 'method': 'passthru',
'asset': coin, 'asset': coin,
'function': 'listunspent', 'function': 'listunspent',
@ -146,8 +146,8 @@ export function getKMDAddressesNative(coin, mode, currentAddress) {
}; };
} else { } else {
payload = { payload = {
'userpass': 'tmpIgRPCUser@' + sessionStorage.getItem('IguanaRPCAuth'), 'userpass': `tmpIgRPCUser@${sessionStorage.getItem('IguanaRPCAuth')}`,
'agent': passthru_agent, 'agent': passthruAgent,
'method': 'passthru', 'method': 'passthru',
'function': 'listunspent', 'function': 'listunspent',
'hex': '', 'hex': '',
@ -156,7 +156,7 @@ export function getKMDAddressesNative(coin, mode, currentAddress) {
if (mode === 'full') { if (mode === 'full') {
payload = { payload = {
'userpass': 'tmpIgRPCUser@' + sessionStorage.getItem('IguanaRPCAuth'), 'userpass': `tmpIgRPCUser@${sessionStorage.getItem('IguanaRPCAuth')}`,
'coin': coin, 'coin': coin,
'method': 'listunspent', 'method': 'listunspent',
'params': [ 'params': [
@ -169,7 +169,7 @@ export function getKMDAddressesNative(coin, mode, currentAddress) {
// if api cache option is off // if api cache option is off
if (mode === 'basilisk') { if (mode === 'basilisk') {
payload = { payload = {
'userpass': 'tmpIgRPCUser@' + sessionStorage.getItem('IguanaRPCAuth'), 'userpass': `tmpIgRPCUser@${sessionStorage.getItem('IguanaRPCAuth')}`,
'agent': 'dex', 'agent': 'dex',
'method': 'listunspent', 'method': 'listunspent',
'address': currentAddress, 'address': currentAddress,
@ -247,7 +247,7 @@ export function getKMDAddressesNative(coin, mode, currentAddress) {
if (mode === 'basilisk') { if (mode === 'basilisk') {
const pubkey = JSON.parse(sessionStorage.getItem('IguanaActiveAccount')).pubkey; const pubkey = JSON.parse(sessionStorage.getItem('IguanaActiveAccount')).pubkey;
fetch('http://127.0.0.1:' + Config.agamaPort + '/shepherd/cache?pubkey=' + pubkey, { fetch(`http://127.0.0.1:${Config.agamaPort}/shepherd/cache?pubkey=${pubkey}`, {
method: 'GET', method: 'GET',
headers: { headers: {
'Content-Type': 'application/json', 'Content-Type': 'application/json',
@ -271,12 +271,12 @@ export function getKMDAddressesNative(coin, mode, currentAddress) {
'timestamp': _timestamp, 'timestamp': _timestamp,
'function': 'getKMDAddressesNative+Balance', 'function': 'getKMDAddressesNative+Balance',
'type': 'post', 'type': 'post',
'url': 'http://127.0.0.1:' + (Config.useBasiliskInstance && mode === 'basilisk' ? Config.iguanaCorePort + 1 : Config.iguanaCorePort), 'url': `http://127.0.0.1:${(Config.useBasiliskInstance && mode === 'basilisk' ? Config.iguanaCorePort + 1 : Config.iguanaCorePort)}`,
'payload': payload, 'payload': payload,
'status': 'pending', 'status': 'pending',
})); }));
fetch('http://127.0.0.1:' + (Config.useBasiliskInstance && mode === 'basilisk' ? Config.iguanaCorePort + 1 : Config.iguanaCorePort), { fetch(`http://127.0.0.1:${(Config.useBasiliskInstance && mode === 'basilisk' ? Config.iguanaCorePort + 1 : Config.iguanaCorePort)}`, {
method: 'POST', method: 'POST',
body: JSON.stringify(payload), body: JSON.stringify(payload),
}) })
@ -312,12 +312,12 @@ export function getKMDAddressesNative(coin, mode, currentAddress) {
'timestamp': _timestamp, 'timestamp': _timestamp,
'function': 'getKMDAddressesNative+Balance', 'function': 'getKMDAddressesNative+Balance',
'type': 'post', 'type': 'post',
'url': 'http://127.0.0.1:' + (Config.useBasiliskInstance && mode === 'basilisk' ? Config.iguanaCorePort + 1 : Config.iguanaCorePort), 'url': `http://127.0.0.1:${(Config.useBasiliskInstance && mode === 'basilisk' ? Config.iguanaCorePort + 1 : Config.iguanaCorePort)}`,
'payload': payload, 'payload': payload,
'status': 'pending', 'status': 'pending',
})); }));
fetch('http://127.0.0.1:' + (Config.useBasiliskInstance && mode === 'basilisk' ? Config.iguanaCorePort + 1 : Config.iguanaCorePort), { fetch(`http://127.0.0.1:${(Config.useBasiliskInstance && mode === 'basilisk' ? Config.iguanaCorePort + 1 : Config.iguanaCorePort)}`, {
method: 'POST', method: 'POST',
body: JSON.stringify(payload), body: JSON.stringify(payload),
}) })

4
react/src/actions/atomic.js

@ -15,12 +15,12 @@ export function atomic(payload) {
'timestamp': _timestamp, 'timestamp': _timestamp,
'function': 'atomic', 'function': 'atomic',
'type': 'post', 'type': 'post',
'url': 'http://127.0.0.1:' + Config.iguanaCorePort, 'url': `http://127.0.0.1:${Config.iguanaCorePort}`,
'payload': payload, 'payload': payload,
'status': 'pending', 'status': 'pending',
})); }));
return fetch('http://127.0.0.1:' + Config.iguanaCorePort, { return fetch(`http://127.0.0.1:${Config.iguanaCorePort}`, {
method: 'POST', method: 'POST',
body: JSON.stringify(payload), body: JSON.stringify(payload),
}) })

38
react/src/actions/basiliskCache.js

@ -10,7 +10,7 @@ import {
export function deleteCacheFile(_payload) { export function deleteCacheFile(_payload) {
return dispatch => { return dispatch => {
return fetch('http://127.0.0.1:' + Config.agamaPort + '/shepherd/groom?', { return fetch(`http://127.0.0.1:${Config.agamaPort}/shepherd/groom`, {
method: 'DELETE', method: 'DELETE',
headers: { headers: {
'Content-Type': 'application/json', 'Content-Type': 'application/json',
@ -30,7 +30,7 @@ export function getCacheFile(pubkey) {
const _pubkey = pubkey || JSON.parse(sessionStorage.getItem('IguanaActiveAccount')).pubkey; const _pubkey = pubkey || JSON.parse(sessionStorage.getItem('IguanaActiveAccount')).pubkey;
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
fetch('http://127.0.0.1:' + Config.agamaPort + '/shepherd/groom?filename=' + _pubkey, { fetch(`http://127.0.0.1:${Config.agamaPort}/shepherd/groom?filename=${_pubkey}`, {
method: 'GET', method: 'GET',
headers: { headers: {
'Content-Type': 'application/json', 'Content-Type': 'application/json',
@ -46,16 +46,16 @@ export function getCacheFile(pubkey) {
} }
export function fetchNewCacheData(_payload) { export function fetchNewCacheData(_payload) {
const _userpass = '?userpass=tmpIgRPCUser@' + sessionStorage.getItem('IguanaRPCAuth'), const _userpass = `?userpass=tmpIgRPCUser@${sessionStorage.getItem('IguanaRPCAuth')}`,
_pubkey = '&pubkey=' + _payload.pubkey, _pubkey = `&pubkey=${_payload.pubkey}`,
_route = _payload.allcoins ? 'cache-all' : 'cache-one', _route = _payload.allcoins ? 'cache-all' : 'cache-one',
_coin = '&coin=' + _payload.coin, _coin = `&coin=${_payload.coin}`,
_calls = '&calls=' + _payload.calls, _calls = `&calls=${_payload.calls}`,
_address = _payload.address ? ('&address=' + _payload.address) : '', _address = _payload.address ? (`&address=${_payload.address}`) : '',
_iguanaInstancePort = Config.useBasiliskInstance ? '&port=' + (Config.iguanaCorePort + 1) : ''; _iguanaInstancePort = Config.useBasiliskInstance ? `&port=${Config.iguanaCorePort + 1}` : '';
return dispatch => { return dispatch => {
return fetch('http://127.0.0.1:' + Config.agamaPort + '/shepherd/' + _route + _userpass + _pubkey + _coin + _calls + _address + _iguanaInstancePort, { return fetch(`http://127.0.0.1:${Config.agamaPort}/shepherd/${_route}${_userpass}${_pubkey}${_coin}${_calls}${_address}${_iguanaInstancePort}`, {
method: 'GET', method: 'GET',
headers: { headers: {
'Content-Type': 'application/json', 'Content-Type': 'application/json',
@ -72,7 +72,7 @@ export function fetchNewCacheData(_payload) {
export function getShepherdCache(pubkey, coin) { export function getShepherdCache(pubkey, coin) {
return dispatch => { return dispatch => {
return fetch('http://127.0.0.1:' + Config.agamaPort + '/shepherd/cache?pubkey=' + pubkey, { return fetch(`http://127.0.0.1:${Config.agamaPort}/shepherd/cache?pubkey=${pubkey}`, {
method: 'GET', method: 'GET',
headers: { headers: {
'Content-Type': 'application/json', 'Content-Type': 'application/json',
@ -108,16 +108,16 @@ function getShepherdCacheState(json, pubkey, coin) {
} }
export function fetchUtxoCache(_payload) { export function fetchUtxoCache(_payload) {
const _userpass = '?userpass=tmpIgRPCUser@' + sessionStorage.getItem('IguanaRPCAuth'), const _userpass = `?userpass=tmpIgRPCUser@${sessionStorage.getItem('IguanaRPCAuth')}`,
_pubkey = '&pubkey=' + _payload.pubkey, _pubkey = `&pubkey=${_payload.pubkey}`,
_route = _payload.allcoins ? 'cache-all' : 'cache-one', _route = _payload.allcoins ? 'cache-all' : 'cache-one',
_coin = '&coin=' + _payload.coin, _coin = `&coin=${_payload.coin}`,
_calls = '&calls=' + _payload.calls, _calls = `&calls=${_payload.calls}`,
_address = _payload.address ? ('&address=' + _payload.address) : '', _address = _payload.address ? (`&address=${_payload.address}`) : '',
_iguanaInstancePort = Config.useBasiliskInstance ? '&port=' + (Config.iguanaCorePort + 1) : ''; _iguanaInstancePort = Config.useBasiliskInstance ? `&port=${Config.iguanaCorePort + 1}` : '';
return dispatch => { return dispatch => {
return fetch('http://127.0.0.1:' + Config.agamaPort + '/shepherd/' + _route + _userpass + _pubkey + _coin + _calls + _address + _iguanaInstancePort, { return fetch(`http://127.0.0.1:${Config.agamaPort}/shepherd/${_route}${_userpass}${_pubkey}${_coin}${_calls}${_address}${_iguanaInstancePort}`, {
method: 'GET', method: 'GET',
headers: { headers: {
'Content-Type': 'application/json', 'Content-Type': 'application/json',
@ -134,7 +134,7 @@ export function fetchUtxoCache(_payload) {
export function shepherdGroomPost(_filename, _payload) { export function shepherdGroomPost(_filename, _payload) {
return dispatch => { return dispatch => {
return fetch('http://127.0.0.1:' + Config.agamaPort + '/shepherd/groom/', { return fetch(`http://127.0.0.1:${Config.agamaPort}/shepherd/groom/`, {
method: 'POST', method: 'POST',
headers: { headers: {
'Content-Type': 'application/json', 'Content-Type': 'application/json',
@ -155,7 +155,7 @@ export function shepherdGroomPost(_filename, _payload) {
export function shepherdGroomPostPromise(_filename, _payload) { export function shepherdGroomPostPromise(_filename, _payload) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
fetch('http://127.0.0.1:' + Config.agamaPort + '/shepherd/groom/', { fetch(`http://127.0.0.1:${Config.agamaPort}/shepherd/groom/`, {
method: 'POST', method: 'POST',
headers: { headers: {
'Content-Type': 'application/json', 'Content-Type': 'application/json',

12
react/src/actions/basiliskProcessAddress.js

@ -11,7 +11,7 @@ import {
export function checkAddressBasilisk(coin, address) { export function checkAddressBasilisk(coin, address) {
const payload = { const payload = {
'userpass': 'tmpIgRPCUser@' + sessionStorage.getItem('IguanaRPCAuth'), 'userpass': `tmpIgRPCUser@${sessionStorage.getItem('IguanaRPCAuth')}`,
'agent': 'dex', 'agent': 'dex',
'method': 'checkaddress', 'method': 'checkaddress',
'address': address, 'address': address,
@ -24,12 +24,12 @@ export function checkAddressBasilisk(coin, address) {
'timestamp': _timestamp, 'timestamp': _timestamp,
'function': 'checkAddressBasilisk', 'function': 'checkAddressBasilisk',
'type': 'post', 'type': 'post',
'url': 'http://127.0.0.1:' + (Config.useBasiliskInstance ? Config.iguanaCorePort + 1 : Config.iguanaCorePort), 'url': `http://127.0.0.1:${Config.useBasiliskInstance ? Config.iguanaCorePort + 1 : Config.iguanaCorePort}`,
'payload': payload, 'payload': payload,
'status': 'pending', 'status': 'pending',
})); }));
return fetch('http://127.0.0.1:' + (Config.useBasiliskInstance ? Config.iguanaCorePort + 1 : Config.iguanaCorePort), { return fetch(`http://127.0.0.1:${Config.useBasiliskInstance ? Config.iguanaCorePort + 1 : Config.iguanaCorePort}`, {
method: 'POST', method: 'POST',
body: JSON.stringify(payload), body: JSON.stringify(payload),
}) })
@ -73,7 +73,7 @@ function checkAddressBasiliskHandle(json) {
export function validateAddressBasilisk(coin, address) { export function validateAddressBasilisk(coin, address) {
const payload = { const payload = {
'userpass': 'tmpIgRPCUser@' + sessionStorage.getItem('IguanaRPCAuth'), 'userpass': `tmpIgRPCUser@${sessionStorage.getItem('IguanaRPCAuth')}`,
'agent': 'dex', 'agent': 'dex',
'method': 'validateaddress', 'method': 'validateaddress',
'address': address, 'address': address,
@ -86,12 +86,12 @@ export function validateAddressBasilisk(coin, address) {
'timestamp': _timestamp, 'timestamp': _timestamp,
'function': 'validateAddressBasilisk', 'function': 'validateAddressBasilisk',
'type': 'post', 'type': 'post',
'url': 'http://127.0.0.1:' + Config.iguanaCorePort, 'url': `http://127.0.0.1:${Config.iguanaCorePort}`,
'payload': payload, 'payload': payload,
'status': 'pending', 'status': 'pending',
})); }));
return fetch('http://127.0.0.1:' + (Config.useBasiliskInstance ? Config.iguanaCorePort + 1 : Config.iguanaCorePort), { return fetch(`http://127.0.0.1:${Config.useBasiliskInstance ? Config.iguanaCorePort + 1 : Config.iguanaCorePort}`, {
method: 'POST', method: 'POST',
body: JSON.stringify(payload), body: JSON.stringify(payload),
}) })

2
react/src/actions/basiliskTxHistory.js

@ -13,7 +13,7 @@ export function getBasiliskTransactionsList(coin, address) {
const pubkey = JSON.parse(sessionStorage.getItem('IguanaActiveAccount')).pubkey; const pubkey = JSON.parse(sessionStorage.getItem('IguanaActiveAccount')).pubkey;
return dispatch => { return dispatch => {
return fetch('http://127.0.0.1:' + Config.agamaPort + '/shepherd/cache?pubkey=' + pubkey, { return fetch(`http://127.0.0.1:${Config.agamaPort}/shepherd/cache?pubkey=${pubkey}`, {
method: 'GET', method: 'GET',
headers: { headers: {
'Content-Type': 'application/json', 'Content-Type': 'application/json',

4
react/src/actions/coinList.js

@ -10,7 +10,7 @@ import {
export function shepherdGetCoinList() { export function shepherdGetCoinList() {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
fetch('http://127.0.0.1:' + Config.agamaPort + '/shepherd/coinslist', { fetch(`http://127.0.0.1:${Config.agamaPort}/shepherd/coinslist`, {
method: 'GET', method: 'GET',
headers: { headers: {
'Content-Type': 'application/json', 'Content-Type': 'application/json',
@ -27,7 +27,7 @@ export function shepherdGetCoinList() {
export function shepherdPostCoinList(data) { export function shepherdPostCoinList(data) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
fetch('http://127.0.0.1:' + Config.agamaPort + '/shepherd/coinslist', { fetch(`http://127.0.0.1:${Config.agamaPort}/shepherd/coinslist`, {
method: 'POST', method: 'POST',
headers: { headers: {
'Content-Type': 'application/json', 'Content-Type': 'application/json',

6
react/src/actions/createWallet.js

@ -25,7 +25,7 @@ function createNewWalletState(json) {
export function createNewWallet(_passphrase) { export function createNewWallet(_passphrase) {
const payload = { const payload = {
'userpass': 'tmpIgRPCUser@' + sessionStorage.getItem('IguanaRPCAuth'), 'userpass': `tmpIgRPCUser@${sessionStorage.getItem('IguanaRPCAuth')}`,
'agent': 'bitcoinrpc', 'agent': 'bitcoinrpc',
'method': 'encryptwallet', 'method': 'encryptwallet',
'passphrase': _passphrase, 'passphrase': _passphrase,
@ -37,12 +37,12 @@ export function createNewWallet(_passphrase) {
'timestamp': _timestamp, 'timestamp': _timestamp,
'function': 'createNewWallet', 'function': 'createNewWallet',
'type': 'post', 'type': 'post',
'url': 'http://127.0.0.1:' + Config.iguanaCorePort, 'url': `http://127.0.0.1:${Config.iguanaCorePort}`,
'payload': payload, 'payload': payload,
'status': 'pending', 'status': 'pending',
})); }));
return fetch('http://127.0.0.1:' + Config.iguanaCorePort, { return fetch(`http://127.0.0.1:${Config.iguanaCorePort}`, {
method: 'POST', method: 'POST',
body: JSON.stringify(payload), body: JSON.stringify(payload),
}) })

6
react/src/actions/dexCoins.js

@ -11,7 +11,7 @@ import {
export function getDexCoins() { export function getDexCoins() {
const _payload = { const _payload = {
'userpass': 'tmpIgRPCUser@' + sessionStorage.getItem('IguanaRPCAuth'), 'userpass': `tmpIgRPCUser@${sessionStorage.getItem('IguanaRPCAuth')}`,
'agent': 'InstantDEX', 'agent': 'InstantDEX',
'method': 'allcoins', 'method': 'allcoins',
}; };
@ -22,12 +22,12 @@ export function getDexCoins() {
'timestamp': _timestamp, 'timestamp': _timestamp,
'function': 'getDexCoins', 'function': 'getDexCoins',
'type': 'post', 'type': 'post',
'url': 'http://127.0.0.1:' + Config.iguanaCorePort, 'url': `http://127.0.0.1:${Config.iguanaCorePort}`,
'payload': _payload, 'payload': _payload,
'status': 'pending', 'status': 'pending',
})); }));
return fetch('http://127.0.0.1:' + Config.iguanaCorePort, { return fetch(`http://127.0.0.1:${Config.iguanaCorePort}`, {
method: 'POST', method: 'POST',
body: JSON.stringify(_payload) body: JSON.stringify(_payload)
}) })

12
react/src/actions/edexBalance.js

@ -10,7 +10,7 @@ import {
export function iguanaEdexBalance(coin) { export function iguanaEdexBalance(coin) {
const _payload = { const _payload = {
'userpass': 'tmpIgRPCUser@' + sessionStorage.getItem('IguanaRPCAuth'), 'userpass': `tmpIgRPCUser@${sessionStorage.getItem('IguanaRPCAuth')}`,
'agent': 'bitcoinrpc', 'agent': 'bitcoinrpc',
'method': 'getbalance', 'method': 'getbalance',
'coin': coin, 'coin': coin,
@ -23,12 +23,12 @@ export function iguanaEdexBalance(coin) {
'timestamp': _timestamp, 'timestamp': _timestamp,
'function': 'iguanaEdexBalance', 'function': 'iguanaEdexBalance',
'type': 'post', 'type': 'post',
'url': 'http://127.0.0.1:' + Config.iguanaCorePort, 'url': `http://127.0.0.1:${Config.iguanaCorePort}`,
'payload': _payload, 'payload': _payload,
'status': 'pending', 'status': 'pending',
})); }));
return fetch('http://127.0.0.1:' + Config.iguanaCorePort, { return fetch(`http://127.0.0.1:${Config.iguanaCorePort}`, {
method: 'POST', method: 'POST',
body: JSON.stringify(_payload), body: JSON.stringify(_payload),
}) })
@ -57,7 +57,7 @@ function iguanaEdexBalanceState(json) {
export function getDexBalance(coin, mode, addr) { export function getDexBalance(coin, mode, addr) {
Promise.all(addr.map((_addr, index) => { Promise.all(addr.map((_addr, index) => {
const payload = { const payload = {
'userpass': 'tmpIgRPCUser@' + sessionStorage.getItem('IguanaRPCAuth'), 'userpass': `tmpIgRPCUser@${sessionStorage.getItem('IguanaRPCAuth')}`,
'agent': 'dex', 'agent': 'dex',
'method': 'listunspent', 'method': 'listunspent',
'address': _addr, 'address': _addr,
@ -70,12 +70,12 @@ export function getDexBalance(coin, mode, addr) {
'timestamp': _timestamp, 'timestamp': _timestamp,
'function': 'getDexBalance', 'function': 'getDexBalance',
'type': 'post', 'type': 'post',
'url': 'http://127.0.0.1:' + (Config.useBasiliskInstance ? Config.iguanaCorePort + 1 : Config.iguanaCorePort), 'url': `http://127.0.0.1:${Config.useBasiliskInstance ? Config.iguanaCorePort + 1 : Config.iguanaCorePort}`,
'payload': payload, 'payload': payload,
'status': 'pending', 'status': 'pending',
})); }));
fetch('http://127.0.0.1:' + (Config.useBasiliskInstance ? Config.iguanaCorePort + 1 : Config.iguanaCorePort), { fetch(`http://127.0.0.1:${Config.useBasiliskInstance ? Config.iguanaCorePort + 1 : Config.iguanaCorePort}`, {
method: 'POST', method: 'POST',
body: JSON.stringify(payload), body: JSON.stringify(payload),
}) })

8
react/src/actions/edexGetTx.js

@ -8,9 +8,9 @@ import {
guiLogState guiLogState
} from './log'; } from './log';
export function edexGetTransaction(data) { export function edexGetTransaction(data, dispatch) {
const payload = { const payload = {
'userpass': 'tmpIgRPCUser@' + sessionStorage.getItem('IguanaRPCAuth'), 'userpass': `tmpIgRPCUser@${sessionStorage.getItem('IguanaRPCAuth')}`,
'symbol': data.coin, 'symbol': data.coin,
'agent': 'dex', 'agent': 'dex',
'method': 'gettransaction', 'method': 'gettransaction',
@ -24,12 +24,12 @@ export function edexGetTransaction(data) {
'timestamp': _timestamp, 'timestamp': _timestamp,
'function': 'edexGetTransaction', 'function': 'edexGetTransaction',
'type': 'post', 'type': 'post',
'url': 'http://127.0.0.1:' + Config.iguanaCorePort, 'url': `http://127.0.0.1:${Config.iguanaCorePort}`,
'payload': payload, 'payload': payload,
'status': 'pending', 'status': 'pending',
})); }));
fetch('http://127.0.0.1:' + Config.iguanaCorePort, { fetch(`http://127.0.0.1:${Config.iguanaCorePort}`, {
method: 'POST', method: 'POST',
body: JSON.stringify(payload), body: JSON.stringify(payload),
}) })

6
react/src/actions/fullTxHistory.js

@ -11,7 +11,7 @@ import {
export function getFullTransactionsList(coin) { export function getFullTransactionsList(coin) {
const payload = { const payload = {
'userpass': 'tmpIgRPCUser@' + sessionStorage.getItem('IguanaRPCAuth'), 'userpass': `tmpIgRPCUser@${sessionStorage.getItem('IguanaRPCAuth')}`,
'coin': coin, 'coin': coin,
'method': 'listtransactions', 'method': 'listtransactions',
'params': [ 'params': [
@ -27,12 +27,12 @@ export function getFullTransactionsList(coin) {
'timestamp': _timestamp, 'timestamp': _timestamp,
'function': 'getFullTransactionsList', 'function': 'getFullTransactionsList',
'type': 'post', 'type': 'post',
'url': 'http://127.0.0.1:' + Config.iguanaCorePort, 'url': `http://127.0.0.1:${Config.iguanaCorePort}`,
'payload': payload, 'payload': payload,
'status': 'pending', 'status': 'pending',
})); }));
return fetch('http://127.0.0.1:' + Config.iguanaCorePort, { return fetch(`http://127.0.0.1:${Config.iguanaCorePort}`, {
method: 'POST', method: 'POST',
body: JSON.stringify(payload), body: JSON.stringify(payload),
}) })

6
react/src/actions/getAddrByAccount.js

@ -31,7 +31,7 @@ export function getAddressesByAccountState(json, coin, mode) {
export function getAddressesByAccount(coin, mode) { export function getAddressesByAccount(coin, mode) {
const payload = { const payload = {
'userpass': 'tmpIgRPCUser@' + sessionStorage.getItem('IguanaRPCAuth'), 'userpass': `tmpIgRPCUser@${sessionStorage.getItem('IguanaRPCAuth')}`,
'coin': coin, 'coin': coin,
'agent': 'bitcoinrpc', 'agent': 'bitcoinrpc',
'method': 'getaddressesbyaccount', 'method': 'getaddressesbyaccount',
@ -44,12 +44,12 @@ export function getAddressesByAccount(coin, mode) {
'timestamp': _timestamp, 'timestamp': _timestamp,
'function': 'getAddressesByAccount', 'function': 'getAddressesByAccount',
'type': 'post', 'type': 'post',
'url': 'http://127.0.0.1:' + Config.iguanaCorePort, 'url': `http://127.0.0.1:${Config.iguanaCorePort}`,
'payload': payload, 'payload': payload,
'status': 'pending', 'status': 'pending',
})); }));
return fetch('http://127.0.0.1:' + Config.iguanaCorePort, { return fetch(`http://127.0.0.1:${Config.iguanaCorePort}`, {
method: 'POST', method: 'POST',
body: JSON.stringify(payload), body: JSON.stringify(payload),
}) })

6
react/src/actions/iguanaHelpers.js

@ -22,7 +22,7 @@ export function getPassthruAgent(coin) {
export function iguanaHashHex(data, dispatch) { export function iguanaHashHex(data, dispatch) {
const payload = { const payload = {
'userpass': 'tmpIgRPCUser@' + sessionStorage.getItem('IguanaRPCAuth'), 'userpass': `tmpIgRPCUser@${sessionStorage.getItem('IguanaRPCAuth')}`,
'agent': 'hash', 'agent': 'hash',
'method': 'hex', 'method': 'hex',
'message': data, 'message': data,
@ -34,12 +34,12 @@ export function iguanaHashHex(data, dispatch) {
'timestamp': _timestamp, 'timestamp': _timestamp,
'function': 'iguanaHashHex', 'function': 'iguanaHashHex',
'type': 'post', 'type': 'post',
'url': 'http://127.0.0.1:' + Config.iguanaCorePort, 'url': `http://127.0.0.1:${Config.iguanaCorePort}`,
'payload': payload, 'payload': payload,
'status': 'pending', 'status': 'pending',
})); }));
fetch('http://127.0.0.1:' + Config.iguanaCorePort, { fetch(`http://127.0.0.1:${Config.iguanaCorePort}`, {
method: 'POST', method: 'POST',
body: JSON.stringify(payload), body: JSON.stringify(payload),
}) })

6
react/src/actions/iguanaInstance.js

@ -10,7 +10,7 @@ import {
export function restartIguanaInstance(pmid) { export function restartIguanaInstance(pmid) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
fetch('http://127.0.0.1:' + Config.agamaPort + '/shepherd/forks/restart?pmid=' + pmid, { fetch(`http://127.0.0.1:${Config.agamaPort}/shepherd/forks/restart?pmid=${pmid}`, {
method: 'GET', method: 'GET',
headers: { headers: {
'Content-Type': 'application/json', 'Content-Type': 'application/json',
@ -43,7 +43,7 @@ export function restartBasiliskInstance() {
export function startIguanaInstance(mode, coin) { export function startIguanaInstance(mode, coin) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
fetch('http://127.0.0.1:' + Config.agamaPort + '/shepherd/forks', { fetch(`http://127.0.0.1:${Config.agamaPort}/shepherd/forks`, {
method: 'POST', method: 'POST',
headers: { headers: {
'Content-Type': 'application/json', 'Content-Type': 'application/json',
@ -64,7 +64,7 @@ export function startIguanaInstance(mode, coin) {
export function getIguanaInstancesList() { export function getIguanaInstancesList() {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
fetch('http://127.0.0.1:' + Config.agamaPort + '/shepherd/forks', { fetch(`http://127.0.0.1:${Config.agamaPort}/shepherd/forks`, {
method: 'GET', method: 'GET',
headers: { headers: {
'Content-Type': 'application/json', 'Content-Type': 'application/json',

4
react/src/actions/log.js

@ -9,7 +9,7 @@ export function logGuiHttp(payload) {
dispatch(guiLogState(payload)); dispatch(guiLogState(payload));
// disabled for now // disabled for now
/*return fetch('http://127.0.0.1:' + Config.agamaPort + '/shepherd/guilog', { /*return fetch(`http://127.0.0.1:${Config.agamaPort}/shepherd/guilog`, {
method: 'POST', method: 'POST',
headers: { headers: {
'Content-Type': 'application/json', 'Content-Type': 'application/json',
@ -26,7 +26,7 @@ export function logGuiHttp(payload) {
export function getAgamaLog(type) { export function getAgamaLog(type) {
return dispatch => { return dispatch => {
return fetch('http://127.0.0.1:' + Config.agamaPort + '/shepherd/getlog?type=' + type, { return fetch(`http://127.0.0.1:${Config.agamaPort}/shepherd/getlog?type=${type}`, {
method: 'GET', method: 'GET',
headers: { headers: {
'Content-Type': 'application/json', 'Content-Type': 'application/json',

6
react/src/actions/logout.js

@ -25,7 +25,7 @@ export function logout() {
function walletLock() { function walletLock() {
const payload = { const payload = {
'userpass': 'tmpIgRPCUser@' + sessionStorage.getItem('IguanaRPCAuth'), 'userpass': `tmpIgRPCUser@${sessionStorage.getItem('IguanaRPCAuth')}`,
'agent': 'bitcoinrpc', 'agent': 'bitcoinrpc',
'method': 'walletlock', 'method': 'walletlock',
}; };
@ -36,12 +36,12 @@ function walletLock() {
'timestamp': _timestamp, 'timestamp': _timestamp,
'function': 'walletLock', 'function': 'walletLock',
'type': 'post', 'type': 'post',
'url': 'http://127.0.0.1:' + Config.iguanaCorePort, 'url': `http://127.0.0.1:${Config.iguanaCorePort}`,
'payload': payload, 'payload': payload,
'status': 'pending', 'status': 'pending',
})); }));
return fetch('http://127.0.0.1:' + Config.iguanaCorePort, { return fetch(`http://127.0.0.1:${Config.iguanaCorePort}`, {
method: 'POST', method: 'POST',
body: JSON.stringify(payload), body: JSON.stringify(payload),
}) })

8
react/src/actions/nativeBalance.js

@ -15,7 +15,7 @@ export function getKMDBalanceTotal(coin) {
if (coin !== 'KMD' && if (coin !== 'KMD' &&
coin !== 'ZEC') { coin !== 'ZEC') {
payload = { payload = {
'userpass': 'tmpIgRPCUser@' + sessionStorage.getItem('IguanaRPCAuth'), 'userpass': `tmpIgRPCUser@${sessionStorage.getItem('IguanaRPCAuth')}`,
'agent': 'iguana', 'agent': 'iguana',
'method': 'passthru', 'method': 'passthru',
'asset': coin, 'asset': coin,
@ -24,7 +24,7 @@ export function getKMDBalanceTotal(coin) {
}; };
} else { } else {
payload = { payload = {
'userpass': 'tmpIgRPCUser@' + sessionStorage.getItem('IguanaRPCAuth'), 'userpass': `tmpIgRPCUser@${sessionStorage.getItem('IguanaRPCAuth')}`,
'agent': getPassthruAgent(coin), 'agent': getPassthruAgent(coin),
'method': 'passthru', 'method': 'passthru',
'function': 'z_gettotalbalance', 'function': 'z_gettotalbalance',
@ -38,12 +38,12 @@ export function getKMDBalanceTotal(coin) {
'timestamp': _timestamp, 'timestamp': _timestamp,
'function': 'getKMDBalanceTotal', 'function': 'getKMDBalanceTotal',
'type': 'post', 'type': 'post',
'url': 'http://127.0.0.1:' + Config.iguanaCorePort, 'url': `http://127.0.0.1:${Config.iguanaCorePort}`,
'payload': payload, 'payload': payload,
'status': 'pending', 'status': 'pending',
})); }));
return fetch('http://127.0.0.1:' + Config.iguanaCorePort, { return fetch(`http://127.0.0.1:${Config.iguanaCorePort}`, {
method: 'POST', method: 'POST',
body: JSON.stringify(payload), body: JSON.stringify(payload),
}) })

16
react/src/actions/nativeNewAddress.js

@ -19,22 +19,22 @@ function handleGetNewKMDAddresses(pubpriv, coin, dispatch) {
export function getNewKMDAddresses(coin, pubpriv) { export function getNewKMDAddresses(coin, pubpriv) {
let payload, let payload,
ajax_function_input = ''; ajaxFunctionInput = '';
if (pubpriv === 'public') { if (pubpriv === 'public') {
ajax_function_input = 'getnewaddress'; ajaxFunctionInput = 'getnewaddress';
} }
if (pubpriv === 'private') { if (pubpriv === 'private') {
ajax_function_input = 'z_getnewaddress'; ajaxFunctionInput = 'z_getnewaddress';
} }
if (getPassthruAgent(coin) === 'iguana') { if (getPassthruAgent(coin) === 'iguana') {
payload = { payload = {
'userpass': 'tmpIgRPCUser@' + sessionStorage.getItem('IguanaRPCAuth'), 'userpass': `tmpIgRPCUser@${sessionStorage.getItem('IguanaRPCAuth')}`,
'agent': getPassthruAgent(coin), 'agent': getPassthruAgent(coin),
'method': 'passthru', 'method': 'passthru',
'asset': coin, 'asset': coin,
'function': ajax_function_input, 'function': ajaxFunctionInput,
'hex': '', 'hex': '',
}; };
} else { } else {
@ -42,7 +42,7 @@ export function getNewKMDAddresses(coin, pubpriv) {
'userpass': 'tmpIgRPCUser@' + sessionStorage.getItem('IguanaRPCAuth'), 'userpass': 'tmpIgRPCUser@' + sessionStorage.getItem('IguanaRPCAuth'),
'agent': coin, 'agent': coin,
'method': 'passthru', 'method': 'passthru',
'function': ajax_function_input, 'function': ajaxFunctionInput,
'hex': '', 'hex': '',
}; };
} }
@ -53,12 +53,12 @@ export function getNewKMDAddresses(coin, pubpriv) {
'timestamp': _timestamp, 'timestamp': _timestamp,
'function': 'getNewKMDAddresses', 'function': 'getNewKMDAddresses',
'type': 'post', 'type': 'post',
'url': 'http://127.0.0.1:' + Config.iguanaCorePort, 'url': `http://127.0.0.1:${Config.iguanaCorePort}`,
'payload': payload, 'payload': payload,
'status': 'pending', 'status': 'pending',
})); }));
return fetch('http://127.0.0.1:' + Config.iguanaCorePort, { return fetch(`http://127.0.0.1:${Config.iguanaCorePort}`, {
method: 'POST', method: 'POST',
body: JSON.stringify(payload), body: JSON.stringify(payload),
}) })

55
react/src/actions/nativeSend.js

@ -12,23 +12,23 @@ import {
} from './log'; } from './log';
export function sendNativeTx(coin, _payload) { export function sendNativeTx(coin, _payload) {
let ajax_data_to_hex; let ajaxDataToHex;
let payload; let payload;
let _apiMethod; let _apiMethod;
if (_payload.addressType === 'public') { if (_payload.addressType === 'public') {
_apiMethod = 'sendtoaddress'; _apiMethod = 'sendtoaddress';
ajax_data_to_hex = '["' + _payload.sendTo + '", ' + (Number(_payload.amount) - Number(_payload.fee)) + ']'; ajaxDataToHex = `["${_payload.sendTo}", ${Number(_payload.amount) - Number(_payload.fee)}]`;
} else { } else {
_apiMethod = 'z_sendmany'; _apiMethod = 'z_sendmany';
ajax_data_to_hex = '["' + _payload.sendFrom + '",[{"address":"' + _payload.sendTo + '","amount":' + (Number(_payload.amount) - Number(_payload.fee)) + '}]]'; ajaxDataToHex = `["${_payload.sendFrom}", [{"address": "${_payload.sendTo}", "amount": ${Number(_payload.amount) - Number(_payload.fee)}}]]`;
} }
return dispatch => { return dispatch => {
return iguanaHashHex(ajax_data_to_hex, dispatch).then((hashHexJson) => { return iguanaHashHex(ajaxDataToHex, dispatch).then((hashHexJson) => {
if (getPassthruAgent(coin) === 'iguana') { if (getPassthruAgent(coin) === 'iguana') {
payload = { payload = {
'userpass': 'tmpIgRPCUser@' + sessionStorage.getItem('IguanaRPCAuth'), 'userpass': `tmpIgRPCUser@${sessionStorage.getItem('IguanaRPCAuth')}`,
'agent': getPassthruAgent(coin), 'agent': getPassthruAgent(coin),
'method': 'passthru', 'method': 'passthru',
'asset': coin, 'asset': coin,
@ -37,7 +37,7 @@ export function sendNativeTx(coin, _payload) {
}; };
} else { } else {
payload = { payload = {
'userpass': 'tmpIgRPCUser@' + sessionStorage.getItem('IguanaRPCAuth'), 'userpass': `tmpIgRPCUser@${sessionStorage.getItem('IguanaRPCAuth')}`,
'agent': getPassthruAgent(coin), 'agent': getPassthruAgent(coin),
'method': 'passthru', 'method': 'passthru',
'function': _apiMethod, 'function': _apiMethod,
@ -50,12 +50,12 @@ export function sendNativeTx(coin, _payload) {
'timestamp': _timestamp, 'timestamp': _timestamp,
'function': 'sendNativeTx', 'function': 'sendNativeTx',
'type': 'post', 'type': 'post',
'url': 'http://127.0.0.1:' + Config.iguanaCorePort, 'url': `http://127.0.0.1:${Config.iguanaCorePort}`,
'payload': payload, 'payload': payload,
'status': 'pending', 'status': 'pending',
})); }));
fetch('http://127.0.0.1:' + Config.iguanaCorePort, { fetch(`http://127.0.0.1:${Config.iguanaCorePort}`, {
method: 'POST', method: 'POST',
body: JSON.stringify(payload), body: JSON.stringify(payload),
}) })
@ -68,7 +68,16 @@ export function sendNativeTx(coin, _payload) {
})); }));
dispatch(triggerToaster(true, 'sendNativeTx', 'Error', 'error')); dispatch(triggerToaster(true, 'sendNativeTx', 'Error', 'error'));
}) })
.then(response => response.json()) .then(function(response) {
if (_apiMethod === 'sendtoaddress') {
const _response = response.text().then(function(text) { return text; });
console.log('native sendtoaddress', _response);
return _response;
} else {
return response.json();
}
})
.then(function(json) { .then(function(json) {
dispatch(logGuiHttp({ dispatch(logGuiHttp({
'timestamp': _timestamp, 'timestamp': _timestamp,
@ -83,10 +92,6 @@ export function sendNativeTx(coin, _payload) {
dispatch(triggerToaster(true, translate('TOASTR.TX_SENT_ALT'), translate('TOASTR.WALLET_NOTIFICATION'), 'success')); dispatch(triggerToaster(true, translate('TOASTR.TX_SENT_ALT'), translate('TOASTR.WALLET_NOTIFICATION'), 'success'));
} }
}) })
.catch(function(ex) {
dispatch(triggerToaster(true, translate('TOASTR.TX_SENT_ALT'), translate('TOASTR.WALLET_NOTIFICATION'), 'success'));
console.log('parsing failed', ex);
})
}); });
} }
} }
@ -99,29 +104,29 @@ export function getKMDOPIDState(json) {
} }
export function getKMDOPID(opid, coin) { export function getKMDOPID(opid, coin) {
let tmpopid_output = '', let tmpopidOutput = '',
ajax_data_to_hex; ajaxDataToHex;
if (opid === undefined) { if (opid === undefined) {
ajax_data_to_hex = null; ajaxDataToHex = null;
} else { } else {
ajax_data_to_hex = '["' + opid + '"]'; ajaxDataToHex = `["${opid}"]`;
} }
return dispatch => { return dispatch => {
return iguanaHashHex(ajax_data_to_hex, dispatch).then((hashHexJson) => { return iguanaHashHex(ajaxDataToHex, dispatch).then((hashHexJson) => {
if (hashHexJson === '5b226e756c6c225d00') { if (hashHexJson === '5b226e756c6c225d00') {
hashHexJson = ''; hashHexJson = '';
} }
let payload, let payload,
passthru_agent = getPassthruAgent(coin), passthruAgent = getPassthruAgent(coin),
tmpIguanaRPCAuth = 'tmpIgRPCUser@' + sessionStorage.getItem('IguanaRPCAuth'); tmpIguanaRPCAuth = `tmpIgRPCUser@${sessionStorage.getItem('IguanaRPCAuth')}`;
if (passthru_agent == 'iguana') { if (passthruAgent == 'iguana') {
payload = { payload = {
'userpass': tmpIguanaRPCAuth, 'userpass': tmpIguanaRPCAuth,
'agent': passthru_agent, 'agent': passthruAgent,
'method': 'passthru', 'method': 'passthru',
'asset': coin, 'asset': coin,
'function': 'z_getoperationstatus', 'function': 'z_getoperationstatus',
@ -130,7 +135,7 @@ export function getKMDOPID(opid, coin) {
} else { } else {
payload = { payload = {
'userpass': tmpIguanaRPCAuth, 'userpass': tmpIguanaRPCAuth,
'agent': passthru_agent, 'agent': passthruAgent,
'method': 'passthru', 'method': 'passthru',
'function': 'z_getoperationstatus', 'function': 'z_getoperationstatus',
'hex': hashHexJson, 'hex': hashHexJson,
@ -142,12 +147,12 @@ export function getKMDOPID(opid, coin) {
'timestamp': _timestamp, 'timestamp': _timestamp,
'function': 'getKMDOPID', 'function': 'getKMDOPID',
'type': 'post', 'type': 'post',
'url': 'http://127.0.0.1:' + Config.iguanaCorePort, 'url': `http://127.0.0.1:${Config.iguanaCorePort}`,
'payload': payload, 'payload': payload,
'status': 'pending', 'status': 'pending',
})); }));
fetch('http://127.0.0.1:' + Config.iguanaCorePort, { fetch(`http://127.0.0.1:${Config.iguanaCorePort}`, {
method: 'POST', method: 'POST',
body: JSON.stringify(payload), body: JSON.stringify(payload),
}) })

10
react/src/actions/nativeSyncInfo.js

@ -19,12 +19,12 @@ export function getSyncInfoNativeKMD(skipDebug) {
'timestamp': _timestamp, 'timestamp': _timestamp,
'function': 'getSyncInfoNativeKMD', 'function': 'getSyncInfoNativeKMD',
'type': 'post', 'type': 'post',
'url': 'http://127.0.0.1:' + Config.iguanaCorePort + '/api/dex/getinfo?userpass=tmpIgRPCUser@' + sessionStorage.getItem('IguanaRPCAuth') + '&symbol=' + coin, 'url': `http://127.0.0.1:${Config.iguanaCorePort}/api/dex/getinfo?userpass=tmpIgRPCUser@${sessionStorage.getItem('IguanaRPCAuth')}&symbol=${coin}`,
'payload': '', 'payload': '',
'status': 'pending', 'status': 'pending',
})); }));
return fetch('http://127.0.0.1:' + Config.iguanaCorePort + '/api/dex/getinfo?userpass=tmpIgRPCUser@' + sessionStorage.getItem('IguanaRPCAuth') + '&symbol=' + coin, { return fetch(`http://127.0.0.1:${Config.iguanaCorePort}/api/dex/getinfo?userpass=tmpIgRPCUser@${sessionStorage.getItem('IguanaRPCAuth')}&symbol=${coin}`, {
method: 'GET', method: 'GET',
}) })
.catch(function(error) { .catch(function(error) {
@ -68,7 +68,7 @@ function getSyncInfoNativeState(json, coin, skipDebug) {
export function getSyncInfoNative(coin, skipDebug) { export function getSyncInfoNative(coin, skipDebug) {
const payload = { const payload = {
'userpass': 'tmpIgRPCUser@' + sessionStorage.getItem('IguanaRPCAuth'), 'userpass': `tmpIgRPCUser@${sessionStorage.getItem('IguanaRPCAuth')}`,
'agent': getPassthruAgent(coin), 'agent': getPassthruAgent(coin),
'method': 'passthru', 'method': 'passthru',
'asset': coin, 'asset': coin,
@ -82,12 +82,12 @@ export function getSyncInfoNative(coin, skipDebug) {
'timestamp': _timestamp, 'timestamp': _timestamp,
'function': 'getSyncInfo', 'function': 'getSyncInfo',
'type': 'post', 'type': 'post',
'url': 'http://127.0.0.1:' + Config.iguanaCorePort, 'url': `http://127.0.0.1:${Config.iguanaCorePort}`,
'payload': payload, 'payload': payload,
'status': 'pending', 'status': 'pending',
})); }));
return fetch('http://127.0.0.1:' + Config.iguanaCorePort, { return fetch(`http://127.0.0.1:${Config.iguanaCorePort}`, {
method: 'POST', method: 'POST',
body: JSON.stringify(payload), body: JSON.stringify(payload),
}) })

8
react/src/actions/nativeTxHistory.js

@ -15,7 +15,7 @@ export function getNativeTxHistory(coin) {
if (getPassthruAgent(coin) === 'iguana') { if (getPassthruAgent(coin) === 'iguana') {
payload = { payload = {
'userpass': 'tmpIgRPCUser@' + sessionStorage.getItem('IguanaRPCAuth'), 'userpass': `tmpIgRPCUser@${sessionStorage.getItem('IguanaRPCAuth')}`,
'agent': 'iguana', 'agent': 'iguana',
'method': 'passthru', 'method': 'passthru',
'asset': coin, 'asset': coin,
@ -24,7 +24,7 @@ export function getNativeTxHistory(coin) {
}; };
} else { } else {
payload = { payload = {
'userpass': 'tmpIgRPCUser@' + sessionStorage.getItem('IguanaRPCAuth'), 'userpass': `tmpIgRPCUser@${sessionStorage.getItem('IguanaRPCAuth')}`,
'agent': getPassthruAgent(coin), 'agent': getPassthruAgent(coin),
'method': 'passthru', 'method': 'passthru',
'function': 'listtransactions', 'function': 'listtransactions',
@ -38,12 +38,12 @@ export function getNativeTxHistory(coin) {
'timestamp': _timestamp, 'timestamp': _timestamp,
'function': 'getNativeTxHistory', 'function': 'getNativeTxHistory',
'type': 'post', 'type': 'post',
'url': 'http://127.0.0.1:' + Config.iguanaCorePort, 'url': `http://127.0.0.1:${Config.iguanaCorePort}`,
'payload': payload, 'payload': payload,
'status': 'pending', 'status': 'pending',
})); }));
return fetch('http://127.0.0.1:' + Config.iguanaCorePort, { return fetch(`http://127.0.0.1:${Config.iguanaCorePort}`, {
method: 'POST', method: 'POST',
body: JSON.stringify(payload), body: JSON.stringify(payload),
}) })

20
react/src/actions/notary.js

@ -13,7 +13,7 @@ function initNotaryNodesConSequence(nodes) {
return dispatch => { return dispatch => {
Promise.all(nodes.map((node, index) => { Promise.all(nodes.map((node, index) => {
const payload = { const payload = {
'userpass': 'tmpIgRPCUser@' + sessionStorage.getItem('IguanaRPCAuth'), 'userpass': `tmpIgRPCUser@${sessionStorage.getItem('IguanaRPCAuth')}`,
'agent': 'dex', 'agent': 'dex',
'method': 'getinfo', 'method': 'getinfo',
'symbol': node, 'symbol': node,
@ -24,14 +24,14 @@ function initNotaryNodesConSequence(nodes) {
const _timestamp = Date.now(); const _timestamp = Date.now();
dispatch(logGuiHttp({ dispatch(logGuiHttp({
'timestamp': _timestamp, 'timestamp': _timestamp,
'function': 'initNotaryNodesConSequence+' + node, 'function': `initNotaryNodesConSequence+${node}`,
'type': 'post', 'type': 'post',
'url': 'http://127.0.0.1:' + Config.iguanaCorePort, 'url': `http://127.0.0.1:${Config.iguanaCorePort}`,
'payload': payload, 'payload': payload,
'status': 'pending', 'status': 'pending',
})); }));
fetch('http://127.0.0.1:' + (Config.useBasiliskInstance ? Config.iguanaCorePort + 1 : Config.iguanaCorePort) + '/api/dex/getinfo?userpass=' + ('tmpIgRPCUser@' + sessionStorage.getItem('IguanaRPCAuth')) + '&symbol=' + node, { fetch(`http://127.0.0.1:${(Config.useBasiliskInstance ? Config.iguanaCorePort + 1 : Config.iguanaCorePort)}/api/dex/getinfo?userpass=${('tmpIgRPCUser@' + sessionStorage.getItem('IguanaRPCAuth'))}&symbol=${node}`, {
method: 'GET', method: 'GET',
}) })
.catch(function(error) { .catch(function(error) {
@ -41,7 +41,7 @@ function initNotaryNodesConSequence(nodes) {
'status': 'error', 'status': 'error',
'response': error, 'response': error,
})); }));
dispatch(triggerToaster(true, 'getInfoDexNode+' + node, 'Error', 'error')); dispatch(triggerToaster(true, `getInfoDexNode+${node}`, 'Error', 'error'));
}) })
.then(response => response.json()) .then(response => response.json())
.then(json => { .then(json => {
@ -99,13 +99,13 @@ function connectAllNotaryNodes(json, dispatch) {
export function connectNotaries() { export function connectNotaries() {
const payload = { const payload = {
'userpass': 'tmpIgRPCUser@' + sessionStorage.getItem('IguanaRPCAuth'), 'userpass': `tmpIgRPCUser@${sessionStorage.getItem('IguanaRPCAuth')}`,
'agent': 'dpow', 'agent': 'dpow',
'method': 'notarychains', 'method': 'notarychains',
}; };
return dispatch => { return dispatch => {
return fetch('http://127.0.0.1:' + Config.iguanaCorePort, { return fetch(`http://127.0.0.1:${Config.iguanaCorePort}`, {
method: 'POST', method: 'POST',
body: JSON.stringify(payload), body: JSON.stringify(payload),
}) })
@ -133,7 +133,7 @@ function getDexNotariesState(json) {
export function getDexNotaries(coin) { export function getDexNotaries(coin) {
const payload = { const payload = {
'userpass': 'tmpIgRPCUser@' + sessionStorage.getItem('IguanaRPCAuth'), 'userpass': `tmpIgRPCUser@${sessionStorage.getItem('IguanaRPCAuth')}`,
'agent': 'dex', 'agent': 'dex',
'method': 'getnotaries', 'method': 'getnotaries',
'symbol': coin, 'symbol': coin,
@ -145,11 +145,11 @@ export function getDexNotaries(coin) {
'timestamp': _timestamp, 'timestamp': _timestamp,
'function': 'getDexNotaries', 'function': 'getDexNotaries',
'type': 'post', 'type': 'post',
'url': 'http://127.0.0.1:' + (Config.useBasiliskInstance ? Config.iguanaCorePort + 1 : Config.iguanaCorePort), 'url': `http://127.0.0.1:${Config.useBasiliskInstance ? Config.iguanaCorePort + 1 : Config.iguanaCorePort}`,
'payload': payload, 'payload': payload,
'status': 'pending', 'status': 'pending',
})); }));
return fetch('http://127.0.0.1:' + (Config.useBasiliskInstance ? Config.iguanaCorePort + 1 : Config.iguanaCorePort), { return fetch(`http://127.0.0.1:${Config.useBasiliskInstance ? Config.iguanaCorePort + 1 : Config.iguanaCorePort}`, {
method: 'POST', method: 'POST',
body: JSON.stringify(payload), body: JSON.stringify(payload),
}) })

31
react/src/actions/sendFullBasilisk.js

@ -2,7 +2,8 @@ import * as storeType from './storeType';
import { translate } from '../translate/translate'; import { translate } from '../translate/translate';
import { import {
triggerToaster, triggerToaster,
Config Config,
getDispatch
} from './actionCreators'; } from './actionCreators';
import { import {
logGuiHttp, logGuiHttp,
@ -11,7 +12,7 @@ import {
export function sendToAddress(coin, _payload) { export function sendToAddress(coin, _payload) {
const payload = { const payload = {
'userpass': 'tmpIgRPCUser@' + sessionStorage.getItem('IguanaRPCAuth'), 'userpass': `tmpIgRPCUser@${sessionStorage.getItem('IguanaRPCAuth')}`,
'coin': coin, 'coin': coin,
'method': 'sendtoaddress', 'method': 'sendtoaddress',
'params': [ 'params': [
@ -28,12 +29,12 @@ export function sendToAddress(coin, _payload) {
'timestamp': _timestamp, 'timestamp': _timestamp,
'function': 'sendToAddress', 'function': 'sendToAddress',
'type': 'post', 'type': 'post',
'url': 'http://127.0.0.1:' + Config.iguanaCorePort, 'url': `http://127.0.0.1:${Config.iguanaCorePort}`,
'payload': payload, 'payload': payload,
'status': 'pending', 'status': 'pending',
})); }));
return fetch('http://127.0.0.1:' + Config.iguanaCorePort, { return fetch(`http://127.0.0.1:${Config.iguanaCorePort}`, {
method: 'POST', method: 'POST',
body: JSON.stringify(payload), body: JSON.stringify(payload),
}) })
@ -60,7 +61,7 @@ export function sendToAddress(coin, _payload) {
export function sendFromAddress(coin, _payload) { export function sendFromAddress(coin, _payload) {
const payload = { const payload = {
'userpass': 'tmpIgRPCUser@' + sessionStorage.getItem('IguanaRPCAuth'), 'userpass': `tmpIgRPCUser@${sessionStorage.getItem('IguanaRPCAuth')}`,
'coin': coin, 'coin': coin,
'method': 'sendfrom', 'method': 'sendfrom',
'params': [ 'params': [
@ -78,12 +79,12 @@ export function sendFromAddress(coin, _payload) {
'timestamp': _timestamp, 'timestamp': _timestamp,
'function': 'sendFromAddress', 'function': 'sendFromAddress',
'type': 'post', 'type': 'post',
'url': 'http://127.0.0.1:' + Config.iguanaCorePort, 'url': `http://127.0.0.1:${Config.iguanaCorePort}`,
'payload': payload, 'payload': payload,
'status': 'pending', 'status': 'pending',
})); }));
return fetch('http://127.0.0.1:' + Config.iguanaCorePort, { return fetch(`http://127.0.0.1:${Config.iguanaCorePort}`, {
method: 'POST', method: 'POST',
body: JSON.stringify(payload), body: JSON.stringify(payload),
}) })
@ -108,9 +109,9 @@ export function sendFromAddress(coin, _payload) {
} }
} }
export function iguanaUTXORawTX(data) { export function iguanaUTXORawTX(data, dispatch) {
const payload = { const payload = {
'userpass': 'tmpIgRPCUser@' + sessionStorage.getItem('IguanaRPCAuth'), 'userpass': `tmpIgRPCUser@${sessionStorage.getItem('IguanaRPCAuth')}`,
'symbol': data.coin, 'symbol': data.coin,
'agent': 'basilisk', 'agent': 'basilisk',
'method': 'utxorawtx', 'method': 'utxorawtx',
@ -132,18 +133,18 @@ export function iguanaUTXORawTX(data) {
'timestamp': _timestamp, 'timestamp': _timestamp,
'function': 'iguanaUTXORawTX', 'function': 'iguanaUTXORawTX',
'type': 'post', 'type': 'post',
'url': 'http://127.0.0.1:' + Config.iguanaCorePort, 'url': `http://127.0.0.1:${Config.iguanaCorePort}`,
'payload': payload, 'payload': payload,
'status': 'pending', 'status': 'pending',
})); }));
fetch('http://127.0.0.1:' + Config.iguanaCorePort, { fetch(`http://127.0.0.1:${Config.iguanaCorePort}`, {
method: 'POST', method: 'POST',
body: JSON.stringify(payload), body: JSON.stringify(payload),
}) })
.catch(function(error) { .catch(function(error) {
console.log(error); console.log(error);
dispatch(logGuiHttp({ dispatch => dispatch(logGuiHttp({
'timestamp': _timestamp, 'timestamp': _timestamp,
'status': 'error', 'status': 'error',
'response': error, 'response': error,
@ -162,9 +163,9 @@ export function iguanaUTXORawTX(data) {
}); });
} }
export function dexSendRawTX(data) { export function dexSendRawTX(data, dispatch) {
const payload = { const payload = {
'userpass': 'tmpIgRPCUser@' + sessionStorage.getItem('IguanaRPCAuth'), 'userpass': `tmpIgRPCUser@${sessionStorage.getItem('IguanaRPCAuth')}`,
'agent': 'dex', 'agent': 'dex',
'method': 'sendrawtransaction', 'method': 'sendrawtransaction',
'signedtx': data.signedtx, 'signedtx': data.signedtx,
@ -177,7 +178,7 @@ export function dexSendRawTX(data) {
'timestamp': _timestamp, 'timestamp': _timestamp,
'function': 'dexSendRawTX', 'function': 'dexSendRawTX',
'type': 'post', 'type': 'post',
'url': 'http://127.0.0.1:' + Config.iguanaCorePort, 'url': `http://127.0.0.1:${Config.iguanaCorePort}`,
'payload': payload, 'payload': payload,
'status': 'pending', 'status': 'pending',
})); }));

28
react/src/actions/settings.js

@ -18,7 +18,7 @@ function getAppInfoState(json) {
export function getAppInfo() { export function getAppInfo() {
return dispatch => { return dispatch => {
return fetch('http://127.0.0.1:' + Config.agamaPort + '/shepherd/appinfo', { return fetch(`http://127.0.0.1:${Config.agamaPort}/shepherd/appinfo`, {
method: 'GET', method: 'GET',
headers: { headers: {
'Content-Type': 'application/json', 'Content-Type': 'application/json',
@ -36,7 +36,7 @@ export function getAppInfo() {
export function settingsWifkeyState(json, coin) { export function settingsWifkeyState(json, coin) {
return { return {
type: storeType.GET_WIF_KEY, type: storeType.GET_WIF_KEY,
wifkey: json[coin + 'wif'], wifkey: json[`{$coin}wif`],
address: json[coin], address: json[coin],
} }
} }
@ -63,7 +63,7 @@ function parseImportPrivKeyResponse(json, dispatch) {
export function importPrivKey(wifKey) { export function importPrivKey(wifKey) {
const payload = { const payload = {
'userpass': 'tmpIgRPCUser@' + sessionStorage.getItem('IguanaRPCAuth'), 'userpass': `tmpIgRPCUser@${sessionStorage.getItem('IguanaRPCAuth')}`,
'method': 'importprivkey', 'method': 'importprivkey',
'params': [ 'params': [
wifKey, wifKey,
@ -77,12 +77,12 @@ export function importPrivKey(wifKey) {
'timestamp': _timestamp, 'timestamp': _timestamp,
'function': 'importPrivKey', 'function': 'importPrivKey',
'type': 'post', 'type': 'post',
'url': 'http://127.0.0.1:' + Config.iguanaCorePort, 'url': `http://127.0.0.1:${Config.iguanaCorePort}`,
'payload': payload, 'payload': payload,
'status': 'pending', 'status': 'pending',
})); }));
return fetch('http://127.0.0.1:' + Config.iguanaCorePort, { return fetch(`http://127.0.0.1:${Config.iguanaCorePort}`, {
method: 'POST', method: 'POST',
body: JSON.stringify(payload), body: JSON.stringify(payload),
}) })
@ -129,7 +129,7 @@ export function getDebugLog(target, linesCount) {
}; };
return dispatch => { return dispatch => {
return fetch('http://127.0.0.1:' + Config.agamaPort + '/shepherd/debuglog', { return fetch(`http://127.0.0.1:${Config.agamaPort}/shepherd/debuglog`, {
method: 'POST', method: 'POST',
headers: { headers: {
'Content-Type': 'application/json', 'Content-Type': 'application/json',
@ -147,7 +147,7 @@ export function getDebugLog(target, linesCount) {
export function getPeersList(coin) { export function getPeersList(coin) {
const payload = { const payload = {
'userpass': 'tmpIgRPCUser@' + sessionStorage.getItem('IguanaRPCAuth'), 'userpass': `tmpIgRPCUser@${sessionStorage.getItem('IguanaRPCAuth')}`,
'agent': 'SuperNET', 'agent': 'SuperNET',
'method': 'getpeers', 'method': 'getpeers',
'activecoin': coin, 'activecoin': coin,
@ -159,12 +159,12 @@ export function getPeersList(coin) {
'timestamp': _timestamp, 'timestamp': _timestamp,
'function': 'getPeersList', 'function': 'getPeersList',
'type': 'post', 'type': 'post',
'url': 'http://127.0.0.1:' + Config.iguanaCorePort, 'url': `http://127.0.0.1:${Config.iguanaCorePort}`,
'payload': payload, 'payload': payload,
'status': 'pending', 'status': 'pending',
})); }));
return fetch('http://127.0.0.1:' + Config.iguanaCorePort, { return fetch(`http://127.0.0.1:${Config.iguanaCorePort}`, {
method: 'POST', method: 'POST',
body: JSON.stringify(payload), body: JSON.stringify(payload),
}) })
@ -232,7 +232,7 @@ function addPeerNodeState(json, dispatch) {
export function addPeerNode(coin, ip) { export function addPeerNode(coin, ip) {
const payload = { const payload = {
'userpass': 'tmpIgRPCUser@' + sessionStorage.getItem('IguanaRPCAuth'), 'userpass': `tmpIgRPCUser@${sessionStorage.getItem('IguanaRPCAuth')}`,
'agent': 'iguana', 'agent': 'iguana',
'method': 'addnode', 'method': 'addnode',
'activecoin': coin, 'activecoin': coin,
@ -245,12 +245,12 @@ export function addPeerNode(coin, ip) {
'timestamp': _timestamp, 'timestamp': _timestamp,
'function': 'addPeerNode', 'function': 'addPeerNode',
'type': 'post', 'type': 'post',
'url': 'http://127.0.0.1:' + Config.iguanaCorePort, 'url': `http://127.0.0.1:${Config.iguanaCorePort}`,
'payload': payload, 'payload': payload,
'status': 'pending', 'status': 'pending',
})); }));
return fetch('http://127.0.0.1:' + Config.iguanaCorePort, { return fetch(`http://127.0.0.1:${Config.iguanaCorePort}`, {
method: 'POST', method: 'POST',
body: JSON.stringify(payload), body: JSON.stringify(payload),
}) })
@ -277,7 +277,7 @@ export function addPeerNode(coin, ip) {
export function saveAppConfig(_payload) { export function saveAppConfig(_payload) {
return dispatch => { return dispatch => {
return fetch('http://127.0.0.1:' + Config.agamaPort + '/shepherd/appconf', { return fetch(`http://127.0.0.1:${Config.agamaPort}/shepherd/appconf`, {
method: 'POST', method: 'POST',
headers: { headers: {
'Content-Type': 'application/json', 'Content-Type': 'application/json',
@ -302,7 +302,7 @@ function getAppConfigState(json) {
export function getAppConfig() { export function getAppConfig() {
return dispatch => { return dispatch => {
return fetch('http://127.0.0.1:' + Config.agamaPort + '/shepherd/appconf', { return fetch(`http://127.0.0.1:${Config.agamaPort}/shepherd/appconf`, {
method: 'GET', method: 'GET',
headers: { headers: {
'Content-Type': 'application/json', 'Content-Type': 'application/json',

6
react/src/actions/syncInfo.js

@ -25,7 +25,7 @@ function getSyncInfoState(json) {
export function getSyncInfo(coin) { export function getSyncInfo(coin) {
const payload = { const payload = {
'userpass': 'tmpIgRPCUser@' + sessionStorage.getItem('IguanaRPCAuth'), 'userpass': `tmpIgRPCUser@${sessionStorage.getItem('IguanaRPCAuth')}`,
'coin': coin, 'coin': coin,
'agent': 'bitcoinrpc', 'agent': 'bitcoinrpc',
'method': 'getinfo', 'method': 'getinfo',
@ -37,12 +37,12 @@ export function getSyncInfo(coin) {
'timestamp': _timestamp, 'timestamp': _timestamp,
'function': 'getSyncInfo', 'function': 'getSyncInfo',
'type': 'post', 'type': 'post',
'url': 'http://127.0.0.1:' + Config.iguanaCorePort, 'url': `http://127.0.0.1:${Config.iguanaCorePort}`,
'payload': payload, 'payload': payload,
'status': 'pending', 'status': 'pending',
})); }));
return fetch('http://127.0.0.1:' + Config.iguanaCorePort, { return fetch(`http://127.0.0.1:${Config.iguanaCorePort}`, {
method: 'POST', method: 'POST',
body: JSON.stringify(payload), body: JSON.stringify(payload),
}) })

4
react/src/actions/syncOnly.js

@ -25,7 +25,7 @@ function getSyncOnlyForksState(json) {
export function getSyncOnlyForks() { export function getSyncOnlyForks() {
return dispatch => { return dispatch => {
return fetch('http://127.0.0.1:' + Config.agamaPort + '/shepherd/forks/info/show', { return fetch(`http://127.0.0.1:${Config.agamaPort}/shepherd/forks/info/show`, {
method: 'GET', method: 'GET',
headers: { headers: {
'Content-Type': 'application/json', 'Content-Type': 'application/json',
@ -42,7 +42,7 @@ export function getSyncOnlyForks() {
export function stopIguanaFork(pmid) { export function stopIguanaFork(pmid) {
return dispatch => { return dispatch => {
return fetch('http://127.0.0.1:' + Config.agamaPort + '/shepherd/forks/stop?pmid=' + pmid, { return fetch(`http://127.0.0.1:${Config.agamaPort}/shepherd/forks/stop?pmid=${pmid}`, {
method: 'GET', method: 'GET',
headers: { headers: {
'Content-Type': 'application/json', 'Content-Type': 'application/json',

2
react/src/actions/sysInfo.js

@ -10,7 +10,7 @@ import {
export function shepherdGetSysInfo() { export function shepherdGetSysInfo() {
return dispatch => { return dispatch => {
return fetch('http://127.0.0.1:' + Config.agamaPort + '/shepherd/sysinfo', { return fetch(`http://127.0.0.1:${Config.agamaPort}/shepherd/sysinfo`, {
method: 'GET', method: 'GET',
headers: { headers: {
'Content-Type': 'application/json', 'Content-Type': 'application/json',

24
react/src/actions/walletAuth.js

@ -13,7 +13,7 @@ import {
export function encryptWallet(_passphrase, cb, coin) { export function encryptWallet(_passphrase, cb, coin) {
const payload = { const payload = {
'userpass': 'tmpIgRPCUser@' + sessionStorage.getItem('IguanaRPCAuth'), 'userpass': `tmpIgRPCUser@${sessionStorage.getItem('IguanaRPCAuth')}`,
'agent': 'bitcoinrpc', 'agent': 'bitcoinrpc',
'method': 'encryptwallet', 'method': 'encryptwallet',
'passphrase': _passphrase, 'passphrase': _passphrase,
@ -25,12 +25,12 @@ export function encryptWallet(_passphrase, cb, coin) {
'timestamp': _timestamp, 'timestamp': _timestamp,
'function': 'encryptWallet', 'function': 'encryptWallet',
'type': 'post', 'type': 'post',
'url': 'http://127.0.0.1:' + Config.iguanaCorePort, 'url': `http://127.0.0.1:${Config.iguanaCorePort}`,
'payload': payload, 'payload': payload,
'status': 'pending', 'status': 'pending',
})); }));
return fetch('http://127.0.0.1:' + Config.iguanaCorePort, { return fetch(`http://127.0.0.1:${Config.iguanaCorePort}`, {
method: 'POST', method: 'POST',
body: JSON.stringify(payload), body: JSON.stringify(payload),
}) })
@ -58,7 +58,7 @@ export function encryptWallet(_passphrase, cb, coin) {
export function walletPassphrase(_passphrase) { export function walletPassphrase(_passphrase) {
const payload = { const payload = {
'userpass': 'tmpIgRPCUser@' + sessionStorage.getItem('IguanaRPCAuth'), 'userpass': `tmpIgRPCUser@${sessionStorage.getItem('IguanaRPCAuth')}`,
'agent': 'bitcoinrpc', 'agent': 'bitcoinrpc',
'method': 'walletpassphrase', 'method': 'walletpassphrase',
'password': _passphrase, 'password': _passphrase,
@ -71,12 +71,12 @@ export function walletPassphrase(_passphrase) {
'timestamp': _timestamp, 'timestamp': _timestamp,
'function': 'walletpassphrase', 'function': 'walletpassphrase',
'type': 'post', 'type': 'post',
'url': 'http://127.0.0.1:' + Config.iguanaCorePort, 'url': `http://127.0.0.1:${Config.iguanaCorePort}`,
'payload': payload, 'payload': payload,
'status': 'pending', 'status': 'pending',
})); }));
return fetch('http://127.0.0.1:' + Config.iguanaCorePort, { return fetch(`http://127.0.0.1:${Config.iguanaCorePort}`, {
method: 'POST', method: 'POST',
body: JSON.stringify(payload), body: JSON.stringify(payload),
}) })
@ -101,7 +101,7 @@ export function walletPassphrase(_passphrase) {
export function iguanaWalletPassphrase(_passphrase) { export function iguanaWalletPassphrase(_passphrase) {
const _payload = { const _payload = {
'userpass': 'tmpIgRPCUser@' + sessionStorage.getItem('IguanaRPCAuth'), 'userpass': `tmpIgRPCUser@${sessionStorage.getItem('IguanaRPCAuth')}`,
'handle': '', 'handle': '',
'password': _passphrase, 'password': _passphrase,
'timeout': '2592000', 'timeout': '2592000',
@ -115,12 +115,12 @@ export function iguanaWalletPassphrase(_passphrase) {
'timestamp': _timestamp, 'timestamp': _timestamp,
'function': 'iguanaWalletPassphrase', 'function': 'iguanaWalletPassphrase',
'type': 'post', 'type': 'post',
'url': 'http://127.0.0.1:' + Config.iguanaCorePort, 'url': `http://127.0.0.1:${Config.iguanaCorePort}`,
'payload': _payload, 'payload': _payload,
'status': 'pending', 'status': 'pending',
})); }));
return fetch('http://127.0.0.1:' + Config.iguanaCorePort, { return fetch(`http://127.0.0.1:${Config.iguanaCorePort}`, {
method: 'POST', method: 'POST',
body: JSON.stringify(_payload), body: JSON.stringify(_payload),
}) })
@ -147,7 +147,7 @@ export function iguanaWalletPassphrase(_passphrase) {
export function iguanaActiveHandle(getMainAddress) { export function iguanaActiveHandle(getMainAddress) {
const _payload = { const _payload = {
'userpass': 'tmpIgRPCUser@' + sessionStorage.getItem('IguanaRPCAuth'), 'userpass': `tmpIgRPCUser@${sessionStorage.getItem('IguanaRPCAuth')}`,
'agent': 'SuperNET', 'agent': 'SuperNET',
'method': 'activehandle', 'method': 'activehandle',
}; };
@ -158,12 +158,12 @@ export function iguanaActiveHandle(getMainAddress) {
'timestamp': _timestamp, 'timestamp': _timestamp,
'function': 'iguanaActiveHandle', 'function': 'iguanaActiveHandle',
'type': 'post', 'type': 'post',
'url': 'http://127.0.0.1:' + Config.iguanaCorePort, 'url': `http://127.0.0.1:${Config.iguanaCorePort}`,
'payload': _payload, 'payload': _payload,
'status': 'pending', 'status': 'pending',
})); }));
return fetch('http://127.0.0.1:' + Config.iguanaCorePort, { return fetch(`http://127.0.0.1:${Config.iguanaCorePort}`, {
method: 'POST', method: 'POST',
body: JSON.stringify(_payload), body: JSON.stringify(_payload),
}) })

10
react/src/components/addcoin/addcoin.js

@ -97,12 +97,12 @@ class AddCoin extends React.Component {
modalClassName: props.display ? 'show fade' : 'show fade', modalClassName: props.display ? 'show fade' : 'show fade',
})); }));
setTimeout(function() { setTimeout(() => {
this.setState(Object.assign({}, this.state, { this.setState(Object.assign({}, this.state, {
display: props.display, display: props.display,
modalClassName: props.display ? 'show in' : 'hide', modalClassName: props.display ? 'show in' : 'hide',
})); }));
}.bind(this), 100); }, 100);
} }
} }
@ -216,7 +216,7 @@ class AddCoin extends React.Component {
for (let i = 1; i < this.state.coins.length; i++) { for (let i = 1; i < this.state.coins.length; i++) {
const _item = this.state.coins[i]; const _item = this.state.coins[i];
setTimeout(function() { setTimeout(() => {
Store.dispatch(addCoin( Store.dispatch(addCoin(
_item.selectedCoin.split('|')[0], _item.selectedCoin.split('|')[0],
_item.mode, _item.mode,
@ -233,7 +233,7 @@ class AddCoin extends React.Component {
Store.dispatch(toggleAddcoinModal(false, false)); Store.dispatch(toggleAddcoinModal(false, false));
} }
}.bind(this), 2000 * i); }, 2000 * i);
} }
} }
@ -245,7 +245,7 @@ class AddCoin extends React.Component {
const _coin = _item.selectedCoin || ''; const _coin = _item.selectedCoin || '';
items.push( items.push(
<div className={ this.state.coins.length > 1 ? 'multi' : 'single' } key={ 'add-coin-' + i }> <div className={ this.state.coins.length > 1 ? 'multi' : 'single' } key={ `add-coin-${i}` }>
<div className="col-sm-8"> <div className="col-sm-8">
<div className="form-group"> <div className="form-group">
<select <select

22
react/src/components/addcoin/payload.js

@ -133,9 +133,11 @@ export function startCrypto(confpath, coin, mode) {
var tmpinternval = 0, var tmpinternval = 0,
AddCoinData = {}, AddCoinData = {},
tmpPendValue = 1, // TODO: hook up to shepherd sysinfo tmpPendValue = 1, // TODO: hook up to shepherd sysinfo
tmpIguanaRPCAuth = 'tmpIgRPCUser@' + sessionStorage.getItem('IguanaRPCAuth'); tmpIguanaRPCAuth = `tmpIgRPCUser@${sessionStorage.getItem('IguanaRPCAuth')}`;
if (coin !== 'BTC' && coin !== 'LTC' && coin !== 'DOGE') { if (coin !== 'BTC' &&
coin !== 'LTC' &&
coin !== 'DOGE') {
tmpPendValue = parseInt(tmpPendValue) * 4; tmpPendValue = parseInt(tmpPendValue) * 4;
} }
@ -168,16 +170,17 @@ export function startCrypto(confpath, coin, mode) {
} }
} }
console.log('AddCoinData', AddCoinData[coin]);
return AddCoinData[coin]; return AddCoinData[coin];
} }
export function startCurrencyAssetChain(confpath, coin, mode) { export function startCurrencyAssetChain(confpath, coin, mode) {
var AddCoinDataPayload = {}, var AddCoinDataPayload = {},
tmpPendValue = 1, tmpPendValue = 1,
tmpIguanaRPCAuth = 'tmpIgRPCUser@' + sessionStorage.getItem('IguanaRPCAuth'); tmpIguanaRPCAuth = `tmpIgRPCUser@${sessionStorage.getItem('IguanaRPCAuth')}`;
if (coin !== 'BTC' && coin !== 'LTC' && coin !== 'DOGE') { if (coin !== 'BTC' &&
coin !== 'LTC' &&
coin !== 'DOGE') {
tmpPendValue = parseInt(tmpPendValue) * 4; tmpPendValue = parseInt(tmpPendValue) * 4;
} }
@ -631,15 +634,17 @@ export function startCurrencyAssetChain(confpath, coin, mode) {
}; };
AddCoinDataPayload.CZKVar = Object.assign({}, _payloadVar, CZKDiff); AddCoinDataPayload.CZKVar = Object.assign({}, _payloadVar, CZKDiff);
return AddCoinDataPayload[coin + 'Var']; return AddCoinDataPayload[`${coin}Var`];
} }
} }
export function startAssetChain(confpath, coin, mode, getSuppyOnly) { export function startAssetChain(confpath, coin, mode, getSuppyOnly) {
var tmpIguanaRPCAuth = 'tmpIgRPCUser@' + sessionStorage.getItem('IguanaRPCAuth'); var tmpIguanaRPCAuth = `tmpIgRPCUser@${sessionStorage.getItem('IguanaRPCAuth')}`;
var tmpPendValue; var tmpPendValue;
if (coin !== 'BTC' && coin !== 'LTC' && coin !== 'DOGE') { if (coin !== 'BTC' &&
coin !== 'LTC' &&
coin !== 'DOGE') {
tmpPendValue = parseInt(tmpPendValue) * 4; tmpPendValue = parseInt(tmpPendValue) * 4;
} }
@ -667,6 +672,7 @@ export function startAssetChain(confpath, coin, mode, getSuppyOnly) {
'debug': 0, 'debug': 0,
'seedipaddr': '78.47.196.146' 'seedipaddr': '78.47.196.146'
}; };
const acConfig = { const acConfig = {
'SUPERNET': { 'SUPERNET': {
'name': 'SUPERNET', 'name': 'SUPERNET',

2
react/src/components/dashboard/atomic.js

@ -44,7 +44,7 @@ class Atomic extends React.Component {
} }
getAtomicData() { getAtomicData() {
const tmpIguanaRPCAuth = 'tmpIgRPCUser@' + sessionStorage.getItem('IguanaRPCAuth'); const tmpIguanaRPCAuth = `tmpIgRPCUser@${sessionStorage.getItem('IguanaRPCAuth')}`;
let ExplorerInputData; let ExplorerInputData;
switch (this.state.api) { switch (this.state.api) {

315
react/src/components/dashboard/coinTile.js

@ -1,5 +1,9 @@
import React from 'react'; import React from 'react';
import { translate } from '../../translate/translate'; import { translate } from '../../translate/translate';
import {
getCoinTitle,
getModeInfo
} from '../../util/coinHelper';
import CoinTileItem from './coinTileItem'; import CoinTileItem from './coinTileItem';
class CoinTile extends React.Component { class CoinTile extends React.Component {
@ -17,311 +21,20 @@ class CoinTile extends React.Component {
'full' 'full'
]; ];
const allCoins = this.props.Main.coins; const allCoins = this.props.Main.coins;
var items = []; let items = [];
if (this.props.Main && this.props.Main.coins) { if (this.props.Main &&
allCoins) {
modes.map(function(mode) { modes.map(function(mode) {
allCoins[mode].map(function(coin) { allCoins[mode].map(function(coin) {
var coinlogo = '', const _coinMode = getModeInfo(mode),
coinname = '', modecode = _coinMode.code,
modecode = '', modetip = _coinMode.tip,
modetip = '', modecolor = _coinMode.color;
modecolor = '';
switch (mode) { const _coinTitle = getCoinTitle(coin),
case 'native': coinlogo = _coinTitle.logo,
modecode = 'Native'; coinname = _coinTitle.name;
modetip = 'Native';
modecolor = 'primary';
break;
case 'basilisk':
modecode = 'Basilisk';
modetip = 'Basilisk';
modecolor = 'info';
break;
case 'full':
modecode = 'Full';
modetip = 'Full';
modecolor = 'success';
break;
case 'virtual':
modecode = 'Virtual';
modetip = 'Virtual';
modecolor = 'danger';
break;
case 'notarychains':
modecode = 'Notarychains';
modetip = 'Notarychains';
modecolor = 'dark';
break;
}
switch (coin) {
case 'BTC':
coinlogo = 'bitcoin';
coinname = 'Bitcoin';
break;
case 'BTCD':
coinlogo = 'bitcoindark';
coinname = 'BitcoinDark';
break;
case 'LTC':
coinlogo = 'litecoin';
coinname = 'Litecoin';
break;
case 'VPN':
coinlogo = 'vpncoin';
coinname = 'VPNcoin';
break;
case 'SYS':
coinlogo = 'syscoin';
coinname = 'Syscoin';
break;
case 'ZEC':
coinlogo = 'zcash';
coinname = 'Zcash';
break;
case 'NMC':
coinlogo = 'namecoin';
coinname = 'Namecoin';
break;
case 'DEX':
coinlogo = 'dex';
coinname = 'InstantDEX';
break;
case 'DOGE':
coinlogo = 'dogecoin';
coinname = 'Dogecoin';
break;
case 'DGB':
coinlogo = 'digibyte';
coinname = 'Digibyte';
break;
case 'MZC':
coinlogo = 'mazacoin';
coinname = 'Mazacoin';
break;
case 'UNO':
coinlogo = 'unobtanium';
coinname = 'Unobtanium';
break;
case 'ZET':
coinlogo = 'zetacoin';
coinname = 'Zetacoin';
break;
case 'KMD':
coinlogo = 'komodo';
coinname = 'Komodo';
break;
case 'BTM':
coinlogo = 'bitmark';
coinname = 'Bitmark';
break;
case 'CARB':
coinlogo = 'carboncoin';
coinname = 'Carboncoin';
break;
case 'ANC':
coinlogo = 'anoncoin';
coinname = 'AnonCoin';
break;
case 'FRK':
coinlogo = 'franko';
coinname = 'Franko';
break;
case 'GAME':
coinlogo = 'GAME';
coinname = 'GameCredits';
break;
case 'SUPERNET':
coinlogo = 'SUPERNET';
coinname = 'SUPERNET';
break;
case 'REVS':
coinlogo = 'REVS';
coinname = 'REVS';
break;
case 'WLC':
coinlogo = 'WLC';
coinname = 'WIRELESS';
break;
case 'PANGEA':
coinlogo = 'PANGEA';
coinname = 'PANGEA';
break;
case 'JUMBLR':
coinlogo = 'JUMBLR';
coinname = 'JUMBLR';
break;
case 'BET':
coinlogo = 'BET';
coinname = 'BET';
break;
case 'CRYPTO':
coinlogo = 'CRYPTO';
coinname = 'CRYPTO';
break;
case 'HODL':
coinlogo = 'HODL';
coinname = 'HODL';
break;
case 'SHARK':
coinlogo = 'SHARK';
coinname = 'SHARK';
break;
case 'BOTS':
coinlogo = 'BOTS';
coinname = 'BOTS';
break;
case 'MGW':
coinlogo = 'MGW';
coinname = 'MultiGateway';
break;
case 'MVP':
coinlogo = 'MVP';
coinname = 'MVP Lineup';
break;
case 'KV':
coinlogo = 'KV';
coinname = 'KV';
break;
case 'CEAL':
coinlogo = 'CEAL';
coinname = 'CEAL NET';
break;
case 'MESH':
coinlogo = 'MESH';
coinname = 'SpaceMesh';
break;
case 'USD':
coinlogo = 'usd';
coinname = 'US Dollar';
break;
case 'RON':
coinlogo = 'RON';
coinname = 'Romanian Leu';
break;
case 'EUR':
coinlogo = 'EUR';
coinname = 'Euro';
break;
case 'JPY':
coinlogo = 'JPY';
coinname = 'Japanese Yen';
break;
case 'GBP':
coinlogo = 'GBP';
coinname = 'British Pound';
break;
case 'AUD':
coinlogo = 'AUD';
coinname = 'Australian Dollar';
break;
case 'CAD':
coinlogo = 'CAD';
coinname = 'Canadian Dollar';
break;
case 'CHF':
coinlogo = 'CHF';
coinname = 'Swiss Franc';
break;
case 'NZD':
coinlogo = 'NZD';
coinname = 'New Zealand Dollar';
break;
case 'CNY':
coinlogo = 'CNY';
coinname = 'Chinese Yuan';
break;
case 'RUB':
coinlogo = 'RUB';
coinname = 'Russian Ruble';
break;
case 'MXN':
coinlogo = 'MXN';
coinname = 'Mexican peso';
break;
case 'BRL':
coinlogo = 'BRL';
coinname = 'Brazilian Real';
break;
case 'INR':
coinlogo = 'INR';
coinname = 'Indian Rupee';
break;
case 'HKD':
coinlogo = 'HKD';
coinname = 'Hong Kong Dollar';
break;
case 'TRY':
coinlogo = 'TRY';
coinname = 'Turkish Lira';
break;
case 'ZAR':
coinlogo = 'ZAR';
coinname = 'South African Rand';
break;
case 'PLN':
coinlogo = 'PLN';
coinname = 'Polish Zloty';
break;
case 'NOK':
coinlogo = 'NOK';
coinname = 'Norwegian Krone';
break;
case 'SEK':
coinlogo = 'SEK';
coinname = 'Swedish Krona';
break;
case 'DKK':
coinlogo = 'DKK';
coinname = 'Danish Krone';
break;
case 'CZK':
coinlogo = 'CZK';
coinname = 'Czech Koruna';
break;
case 'HUF':
coinlogo = 'HUF';
coinname = 'Hungarian Forint';
break;
case 'ILS':
coinlogo = 'ILS';
coinname = 'Israeli Shekel';
break;
case 'KRW':
coinlogo = 'KRW';
coinname = 'Korean Won';
break;
case 'MYR':
coinlogo = 'MYR';
coinname = 'Malaysian Ringgit';
break;
case 'PHP':
coinlogo = 'PHP';
coinname = 'Philippine Peso';
break;
case 'SGD':
coinlogo = 'SGD';
coinname = 'Singapore Dollar';
break;
case 'THB':
coinlogo = 'THB';
coinname = 'Thai Baht';
break;
case 'BGN':
coinlogo = 'BGN';
coinname = 'Bulgarian Lev';
break;
case 'IDR':
coinlogo = 'IDR';
coinname = 'Indonesian Rupiah';
break;
case 'HRK':
coinlogo = 'HRK';
coinname = 'Croatian Kuna';
break;
}
items.push({ items.push({
coinlogo, coinlogo,

35
react/src/components/dashboard/coinTileItem.js

@ -21,6 +21,11 @@ import {
} from '../../actions/actionCreators'; } from '../../actions/actionCreators';
import Store from '../../store'; import Store from '../../store';
const BASILISK_CACHE_UPDATE_TIMEOUT = 240000;
const IGUNA_ACTIVE_HANDLE_TIMEOUT = 3000;
const IGUNA_ACTIVE_HANDLE_TIMEOUT_KMD_NATIVE = 15000;
const NATIVE_MIN_SYNC_PERCENTAGE_THRESHOLD = 90;
class CoinTileItem extends React.Component { class CoinTileItem extends React.Component {
constructor(props) { constructor(props) {
super(props); super(props);
@ -39,10 +44,13 @@ class CoinTileItem extends React.Component {
dispatchCoinActions(coin, mode) { dispatchCoinActions(coin, mode) {
if (mode === 'native') { if (mode === 'native') {
Store.dispatch(iguanaActiveHandle(true)); Store.dispatch(iguanaActiveHandle(true));
const syncPercentage = this.props.Dashboard && this.props.Dashboard.progress && (parseFloat(parseInt(this.props.Dashboard.progress.blocks, 10) * 100 / parseInt(this.props.Dashboard.progress.longestchain, 10)).toFixed(2)).replace('NaN', 0);
if (this.props.Dashboard.progress && if (this.props.Dashboard.progress &&
this.props.Dashboard.progress.blocks && this.props.Dashboard.progress.blocks &&
this.props.Dashboard.progress.longestchain && this.props.Dashboard.progress.longestchain &&
this.props.Dashboard.progress.blocks === this.props.Dashboard.progress.longestchain) { syncPercentage &&
syncPercentage >= NATIVE_MIN_SYNC_PERCENTAGE_THRESHOLD) {
Store.dispatch(getSyncInfoNative(coin, true)); Store.dispatch(getSyncInfoNative(coin, true));
Store.dispatch(getKMDBalanceTotal(coin)); Store.dispatch(getKMDBalanceTotal(coin));
Store.dispatch(getNativeTxHistory(coin)); Store.dispatch(getNativeTxHistory(coin));
@ -61,6 +69,7 @@ class CoinTileItem extends React.Component {
} }
if (mode === 'basilisk') { if (mode === 'basilisk') {
const useAddress = this.props.ActiveCoin.mainBasiliskAddress ? this.props.ActiveCoin.mainBasiliskAddress : this.props.Dashboard.activeHandle[coin]; const useAddress = this.props.ActiveCoin.mainBasiliskAddress ? this.props.ActiveCoin.mainBasiliskAddress : this.props.Dashboard.activeHandle[coin];
Store.dispatch(iguanaActiveHandle(true)); Store.dispatch(iguanaActiveHandle(true));
Store.dispatch(getKMDAddressesNative(coin, mode, useAddress)); Store.dispatch(getKMDAddressesNative(coin, mode, useAddress));
Store.dispatch(getShepherdCache(JSON.parse(sessionStorage.getItem('IguanaActiveAccount')).pubkey, coin)); Store.dispatch(getShepherdCache(JSON.parse(sessionStorage.getItem('IguanaActiveAccount')).pubkey, coin));
@ -72,8 +81,8 @@ class CoinTileItem extends React.Component {
if (!this.props.ActiveCoin.addresses) { if (!this.props.ActiveCoin.addresses) {
Store.dispatch(getAddressesByAccount(coin, mode)); Store.dispatch(getAddressesByAccount(coin, mode));
} }
Store.dispatch(getBasiliskTransactionsList(coin, useAddress)); Store.dispatch(getBasiliskTransactionsList(coin, useAddress));
//Store.dispatch(iguanaEdexBalance(coin, mode));
} }
} }
} }
@ -87,16 +96,15 @@ class CoinTileItem extends React.Component {
this.dispatchCoinActions(coin, mode); this.dispatchCoinActions(coin, mode);
if (mode === 'full') { if (mode === 'full') {
var _iguanaActiveHandle = setInterval(function() { const _iguanaActiveHandle = setInterval(() => {
this.dispatchCoinActions(coin, mode); this.dispatchCoinActions(coin, mode);
}.bind(this), 3000); }, IGUNA_ACTIVE_HANDLE_TIMEOUT);
Store.dispatch(startInterval('sync', _iguanaActiveHandle)); Store.dispatch(startInterval('sync', _iguanaActiveHandle));
} }
if (mode === 'native') { if (mode === 'native') {
// TODO: add conditions to skip txhistory, balances, addresses while "activating best chain" const _iguanaActiveHandle = setInterval(() => {
var _iguanaActiveHandle = setInterval(function() {
this.dispatchCoinActions(coin, mode); this.dispatchCoinActions(coin, mode);
}.bind(this), coin === 'KMD' ? 15000 : 3000); }, coin === 'KMD' ? IGUNA_ACTIVE_HANDLE_TIMEOUT_KMD_NATIVE : IGUNA_ACTIVE_HANDLE_TIMEOUT);
Store.dispatch(startInterval('sync', _iguanaActiveHandle)); Store.dispatch(startInterval('sync', _iguanaActiveHandle));
} }
if (mode === 'basilisk') { if (mode === 'basilisk') {
@ -112,11 +120,11 @@ class CoinTileItem extends React.Component {
'address': _basiliskMainAddress, 'address': _basiliskMainAddress,
})); }));
var _iguanaActiveHandle = setInterval(function() { const _iguanaActiveHandle = setInterval(() => {
this.dispatchCoinActions(coin, mode); this.dispatchCoinActions(coin, mode);
}.bind(this), 3000); }, IGUNA_ACTIVE_HANDLE_TIMEOUT);
var _basiliskCache = setInterval(function() { const _basiliskCache = setInterval(() => {
Store.dispatch(fetchNewCacheData({ Store.dispatch(fetchNewCacheData({
'pubkey': this.props.Dashboard.activeHandle.pubkey, 'pubkey': this.props.Dashboard.activeHandle.pubkey,
'allcoins': false, 'allcoins': false,
@ -124,10 +132,9 @@ class CoinTileItem extends React.Component {
'calls': 'listtransactions:getbalance', 'calls': 'listtransactions:getbalance',
'address': _basiliskMainAddress, 'address': _basiliskMainAddress,
})); }));
}.bind(this), 240000); }, BASILISK_CACHE_UPDATE_TIMEOUT);
Store.dispatch(startInterval('sync', _iguanaActiveHandle)); Store.dispatch(startInterval('sync', _iguanaActiveHandle));
Store.dispatch(startInterval('basilisk', _basiliskCache)); Store.dispatch(startInterval('basilisk', _basiliskCache));
// basilisk
} }
} }
} }
@ -145,9 +152,9 @@ class CoinTileItem extends React.Component {
<a className="avatar margin-bottom-5" id="edexcoin-logo"> <a className="avatar margin-bottom-5" id="edexcoin-logo">
<img <img
className="img-responsive" className="img-responsive"
src={ 'assets/images/cryptologo/' + item.coinlogo + '.png' } src={ `assets/images/cryptologo/${item.coinlogo}.png` }
alt={ item.coinname }/> alt={ item.coinname }/>
<span className={ 'badge up badge-' + item.modecolor } id="basfull">{ item.modecode }</span> <span className={ `badge up badge-${item.modecolor}` } id="basfull">{ item.modecode }</span>
</a> </a>
<div className="coin-name">{ item.coinname } ({ item.coinlogo.toUpperCase() })</div> <div className="coin-name">{ item.coinname } ({ item.coinlogo.toUpperCase() })</div>
</div> </div>

11
react/src/components/dashboard/sendCoin.js

@ -291,7 +291,7 @@ class SendCoin extends React.Component {
renderAddressList() { renderAddressList() {
return ( return (
<div id="showkmdwalletaddrs" className={ 'btn-group bootstrap-select form-control form-material showkmdwalletaddrs show-tick ' + (this.state.addressSelectorOpen ? 'open' : '') }> <div id="showkmdwalletaddrs" className={ `btn-group bootstrap-select form-control form-material showkmdwalletaddrs show-tick ${(this.state.addressSelectorOpen ? 'open' : '')}` }>
<button <button
type="button" type="button"
className="btn dropdown-toggle btn-info" className="btn dropdown-toggle btn-info"
@ -357,7 +357,8 @@ class SendCoin extends React.Component {
}); });
} }
if (step === 1 || step === 2) { if (step === 1 ||
step === 2) {
this.setState(Object.assign({}, this.state, { this.setState(Object.assign({}, this.state, {
currentStep: step, currentStep: step,
utxoMethodInProgress: !this.state.sendApiType && this.props.ActiveCoin.mode === 'basilisk' ? true : false, utxoMethodInProgress: !this.state.sendApiType && this.props.ActiveCoin.mode === 'basilisk' ? true : false,
@ -411,7 +412,7 @@ class SendCoin extends React.Component {
'utxos': utxoSet 'utxos': utxoSet
}; };
iguanaUTXORawTX(sendData) iguanaUTXORawTX(sendData, Store.dispatch)
.then(function(json) { .then(function(json) {
console.log('sendData', sendData); console.log('sendData', sendData);
console.log('iguanaUTXORawTXJSON', json); console.log('iguanaUTXORawTXJSON', json);
@ -424,7 +425,7 @@ class SendCoin extends React.Component {
'signedtx': json.signedtx, 'signedtx': json.signedtx,
'coin': sendData.coin 'coin': sendData.coin
}; };
dexSendRawTX(dexrawtxData) dexSendRawTX(dexrawtxData, Store.dispatch)
.then(function(dexRawTxJSON) { .then(function(dexRawTxJSON) {
console.log('dexRawTxJSON', dexRawTxJSON); console.log('dexRawTxJSON', dexRawTxJSON);
if (dexRawTxJSON.indexOf('"error":{"code"') > -1) { if (dexRawTxJSON.indexOf('"error":{"code"') > -1) {
@ -445,7 +446,7 @@ class SendCoin extends React.Component {
edexGetTransaction({ edexGetTransaction({
'coin': sendData.coin, 'coin': sendData.coin,
'txid': dexRawTxJSON.txid ? dexRawTxJSON.txid : dexRawTxJSON 'txid': dexRawTxJSON.txid ? dexRawTxJSON.txid : dexRawTxJSON
}) }, Store.dispatch)
.then(function(json) { .then(function(json) {
console.log('gettx', json); console.log('gettx', json);
resolve(json); resolve(json);

5
react/src/components/dashboard/settings.js

@ -53,7 +53,8 @@ class Settings extends React.Component {
} }
openTab(elemId, tab) { openTab(elemId, tab) {
const _height = document.querySelector('#' + elemId + ' .panel-collapse .panel-body').offsetHeight; console.log(`#${elemId}.panel-collapse .panel-body`);
const _height = document.querySelector(`#${elemId} .panel-collapse .panel-body`).offsetHeight;
this.setState(Object.assign({}, this.state, { this.setState(Object.assign({}, this.state, {
activeTab: tab, activeTab: tab,
@ -217,8 +218,6 @@ class Settings extends React.Component {
this.setState({ this.setState({
appSettings: _appSettings, appSettings: _appSettings,
}); });
console.log(this.state.appSettings);
} }
_saveAppConfig() { _saveAppConfig() {

108
react/src/components/dashboard/syncOnly.js

@ -1,5 +1,6 @@
import React from 'react'; import React from 'react';
import { translate } from '../../translate/translate'; import { translate } from '../../translate/translate';
import { getCoinTitle } from '../../util/coinHelper';
import { import {
stopInterval, stopInterval,
addCoin, addCoin,
@ -19,7 +20,8 @@ class SyncOnly extends React.Component {
} }
isFullySynced(fork) { isFullySynced(fork) {
if (fork.balances && ((Number(fork.balances) + if (fork.balances &&
((Number(fork.balances) +
Number(fork.validated) + Number(fork.validated) +
Number(fork.bundles) + Number(fork.bundles) +
Number(fork.utxo)) / 4 === 100)) { Number(fork.utxo)) / 4 === 100)) {
@ -30,96 +32,15 @@ class SyncOnly extends React.Component {
} }
renderCoinName(coin) { renderCoinName(coin) {
let coinlogo; const _coinTitle = getCoinTitle(coin);
let coinname;
switch (coin) {
case 'BTC':
coinlogo = 'bitcoin';
coinname = 'Bitcoin';
break;
case 'BTCD':
coinlogo = 'bitcoindark';
coinname = 'BitcoinDark';
break;
case 'LTC':
coinlogo = 'litecoin';
coinname = 'Litecoin';
break;
case 'VPN':
coinlogo = 'vpncoin';
coinname = 'VPNcoin';
break;
case 'SYS':
coinlogo = 'syscoin';
coinname = 'Syscoin';
break;
case 'ZEC':
coinlogo = 'zcash';
coinname = 'Zcash';
break;
case 'NMC':
coinlogo = 'namecoin';
coinname = 'Namecoin';
break;
case 'DEX':
coinlogo = 'dex';
coinname = 'InstantDEX';
break;
case 'DOGE':
coinlogo = 'dogecoin';
coinname = 'Dogecoin';
break;
case 'DGB':
coinlogo = 'digibyte';
coinname = 'Digibyte';
break;
case 'MZC':
coinlogo = 'mazacoin';
coinname = 'Mazacoin';
break;
case 'UNO':
coinlogo = 'unobtanium';
coinname = 'Unobtanium';
break;
case 'ZET':
coinlogo = 'zetacoin';
coinname = 'Zetacoin';
break;
case 'KMD':
coinlogo = 'komodo';
coinname = 'Komodo';
break;
case 'BTM':
coinlogo = 'bitmark';
coinname = 'Bitmark';
break;
case 'CARB':
coinlogo = 'carboncoin';
coinname = 'Carboncoin';
break;
case 'ANC':
coinlogo = 'anoncoin';
coinname = 'AnonCoin';
break;
case 'FRK':
coinlogo = 'franko';
coinname = 'Franko';
break;
case 'GAME':
coinlogo = 'GAME';
coinname = 'GameCredits';
break;
}
return { return {
'logo': coinlogo, 'logo': _coinTitle.logo,
'name': coinname 'name': _coinTitle.name
}; };
} }
componentWillReceiveProps(props) { componentWillReceiveProps(props) {
// console.log('SyncOnly', props);
if (props.SyncOnly) { if (props.SyncOnly) {
for (let port in this.props.SyncOnly.forks) { for (let port in this.props.SyncOnly.forks) {
const forkInfo = this.props.SyncOnly.forks[port]; const forkInfo = this.props.SyncOnly.forks[port];
@ -130,7 +51,6 @@ class SyncOnly extends React.Component {
forkInfo.getinfo && forkInfo.getinfo &&
forkInfo.getinfo.error && forkInfo.getinfo.error &&
forkInfo.getinfo.error === 'bitcoinrpc needs coin that is active') { forkInfo.getinfo.error === 'bitcoinrpc needs coin that is active') {
console.log('fork add coin required');
let _autoRestartedForks = Object.assign({}, this.state.autoRestartedForks); let _autoRestartedForks = Object.assign({}, this.state.autoRestartedForks);
_autoRestartedForks[port] = true; _autoRestartedForks[port] = true;
@ -138,14 +58,15 @@ class SyncOnly extends React.Component {
autoRestartedForks: _autoRestartedForks, autoRestartedForks: _autoRestartedForks,
}); });
Store.dispatch(addCoin(forkInfo.registry.coin, '1', null, port)); Store.dispatch(addCoin(forkInfo.registry.coin, '1', null, port));
setTimeout(function() {
setTimeout(() => {
let _autoRestartedForks = Object.assign({}, this.state.autoRestartedForks); let _autoRestartedForks = Object.assign({}, this.state.autoRestartedForks);
_autoRestartedForks[port] = false; _autoRestartedForks[port] = false;
this.setState({ this.setState({
autoRestartedForks: _autoRestartedForks, autoRestartedForks: _autoRestartedForks,
}); });
}.bind(this), 10000); }, 10000);
} }
} }
} }
@ -237,12 +158,14 @@ class SyncOnly extends React.Component {
<div className="avatar"> <div className="avatar">
<img <img
className="img-responsive margin-bottom-5" className="img-responsive margin-bottom-5"
src={ 'assets/images/cryptologo/' + this.renderCoinName(forkInfo.registry.coin).logo + '.png' } src={ `assets/images/cryptologo/${this.renderCoinName(forkInfo.registry.coin).logo}.png` }
alt={ forkInfo.registry.coin }/> alt={ forkInfo.registry.coin }/>
<span className="badge up badge-success margin-bottom-5">Full</span> <span className="badge up badge-success margin-bottom-5">Full</span>
<div className="coin-name">{ this.renderCoinName(forkInfo.registry.coin).name } ({ forkInfo.registry.coin.toUpperCase() })</div> <div className="coin-name">{ this.renderCoinName(forkInfo.registry.coin).name } ({ forkInfo.registry.coin.toUpperCase() })</div>
<div className="margin-top-10"> <div className="margin-top-10">
<span className="btn btn-primary" onClick={ () => this._stopIguanaFork(forkInfo.registry.pmid) }> <span
className="btn btn-primary"
onClick={ () => this._stopIguanaFork(forkInfo.registry.pmid) }>
<span className="fa fa-stop"></span> { translate('INDEX.STOP') } <span className="fa fa-stop"></span> { translate('INDEX.STOP') }
</span> </span>
<span <span
@ -281,7 +204,10 @@ class SyncOnly extends React.Component {
{ this.renderForksList() } { this.renderForksList() }
</div> </div>
<div className="modal-footer"> <div className="modal-footer">
<button type="button" className="btn btn-default" onClick={ this.closeSyncOnlyModal }>{ translate('INDEX.CLOSE') }</button> <button
type="button"
className="btn btn-default"
onClick={ this.closeSyncOnlyModal }>{ translate('INDEX.CLOSE') }</button>
</div> </div>
</div> </div>
</div> </div>

4
react/src/components/dashboard/walletsBasiliskConnection.js

@ -76,13 +76,13 @@ class WalletsBasiliskConnection extends React.Component {
</div> </div>
</div> </div>
<h5 className="text-left"> <h5 className="text-left">
{ translate('IAPI.CON_STATUS') + '... ' + this.props.Dashboard.connectedNotaries.current + '/' + this.props.Dashboard.connectedNotaries.total + ': ' + this.props.Dashboard.connectedNotaries.currentNodeName} <span className="pull-right" id="basilisk-connections-refresh-percent">{ Math.floor(this.props.Dashboard.connectedNotaries.current * 100 / this.props.Dashboard.connectedNotaries.total) }%</span> { `${translate('IAPI.CON_STATUS')}... ${this.props.Dashboard.connectedNotaries.current}/${this.props.Dashboard.connectedNotaries.total}:${this.props.Dashboard.connectedNotaries.currentNodeName}` } <span className="pull-right" id="basilisk-connections-refresh-percent">{ Math.floor(this.props.Dashboard.connectedNotaries.current * 100 / this.props.Dashboard.connectedNotaries.total) }%</span>
</h5> </h5>
<div className="progress progress-sm"> <div className="progress progress-sm">
<div className="progress-bar progress-bar-info progress-bar-striped active font-size-80-percent" style={{ width: Math.floor(this.props.Dashboard.connectedNotaries.current * 100 / this.props.Dashboard.connectedNotaries.total) + '%' }} role="progressbar" id="basilisk-connections-refresh-progress-bar"></div> <div className="progress-bar progress-bar-info progress-bar-striped active font-size-80-percent" style={{ width: Math.floor(this.props.Dashboard.connectedNotaries.current * 100 / this.props.Dashboard.connectedNotaries.total) + '%' }} role="progressbar" id="basilisk-connections-refresh-progress-bar"></div>
</div> </div>
<pre id="basilisk-connections-refresh-status-output no-padding"> <pre id="basilisk-connections-refresh-status-output no-padding">
{ this.props.Dashboard.connectedNotaries.failedToConnectNodes ? 'Failed: ' + this.props.Dashboard.connectedNotaries.failedToConnectNodes : null } { this.props.Dashboard.connectedNotaries.failedToConnectNodes ? `Failed: ${this.props.Dashboard.connectedNotaries.failedToConnectNodes}` : null }
</pre> </pre>
</div> </div>
</div> </div>

10
react/src/components/dashboard/walletsData.js

@ -82,6 +82,7 @@ class WalletsData extends React.Component {
} }
} }
// deprecated
toggleCacheApi() { toggleCacheApi() {
const _useCache = !this.state.useCache; const _useCache = !this.state.useCache;
@ -463,6 +464,7 @@ class WalletsData extends React.Component {
} }
}*/ }*/
// deprecated
renderUseCacheToggle() { renderUseCacheToggle() {
if (this.props.ActiveCoin.mode === 'basilisk') { if (this.props.ActiveCoin.mode === 'basilisk') {
return ( return (
@ -548,11 +550,11 @@ class WalletsData extends React.Component {
this.props.Dashboard.activeHandle[this.props.ActiveCoin.coin] && this.props.Dashboard.activeHandle[this.props.ActiveCoin.coin] &&
this.props.ActiveCoin.mode === 'basilisk') { this.props.ActiveCoin.mode === 'basilisk') {
return ( return (
<div className={ 'btn-group bootstrap-select form-control form-material showkmdwalletaddrs show-tick ' + (this.state.addressSelectorOpen ? 'open' : '') }> <div className={ `btn-group bootstrap-select form-control form-material showkmdwalletaddrs show-tick ${(this.state.addressSelectorOpen ? 'open' : '')}` }>
<button <button
type="button" type="button"
className="btn dropdown-toggle btn-info" className="btn dropdown-toggle btn-info"
title={ '-' + translate('KMD_NATIVE.SELECT_ADDRESS') + '-' } title={ `-${translate('KMD_NATIVE.SELECT_ADDRESS')}-` }
aria-expanded="true" aria-expanded="true"
onClick={ this.openDropMenu }> onClick={ this.openDropMenu }>
<span className="filter-option pull-left">{ this.renderSelectorCurrentLabel() } </span>&nbsp; <span className="filter-option pull-left">{ this.renderSelectorCurrentLabel() } </span>&nbsp;
@ -605,7 +607,9 @@ class WalletsData extends React.Component {
{ translate('SEND.PROCESSING_REQ') }: { this.state.currentStackLength } / { this.state.totalStackLength } { translate('SEND.PROCESSING_REQ') }: { this.state.currentStackLength } / { this.state.totalStackLength }
</div> </div>
</div> </div>
<div className={ this.state.basiliskActionsMenu ? 'dropdown open' : 'dropdown' } onClick={ this.toggleBasiliskActionsMenu }> <div
className={ this.state.basiliskActionsMenu ? 'dropdown open' : 'dropdown' }
onClick={ this.toggleBasiliskActionsMenu }>
<a <a
className="dropdown-toggle btn-xs btn-default" className="dropdown-toggle btn-xs btn-default"
id="btn_edexcoin_basilisk" id="btn_edexcoin_basilisk"

4
react/src/components/dashboard/walletsHeader.js

@ -1,7 +1,5 @@
import React from 'react'; import React from 'react';
import { translate } from '../../translate/translate'; import { translate } from '../../translate/translate';
// import { dashboardChangeSection, toggleAddcoinModal } from '../../actions/actionCreators';
// import Store from '../../store';
class WalletsHeader extends React.Component { class WalletsHeader extends React.Component {
render() { render() {
@ -11,7 +9,7 @@ class WalletsHeader extends React.Component {
<div <div
className="page-header page-header-bordered header-easydex margin-bottom-0" className="page-header page-header-bordered header-easydex margin-bottom-0"
id="easydex-header-div" id="easydex-header-div"
style={{ backgroundImage: 'url("assets/images/bg/' + this.props.activeSection + '_transparent_header_bg.png")', backgroundRepeat: 'no-repeat', backgroundPosition: '0%' }}> style={{ backgroundImage: `url("assets/images/bg/${this.props.activeSection}_transparent_header_bg.png")`, backgroundRepeat: 'no-repeat', backgroundPosition: '0%' }}>
<h1 className={ this.props.activeSection === 'jumblr' ? 'hide' : 'page-title' }>EasyDEX</h1> <h1 className={ this.props.activeSection === 'jumblr' ? 'hide' : 'page-title' }>EasyDEX</h1>
<ol className="breadcrumb"> <ol className="breadcrumb">
<li className={ this.props.activeSection === 'jumblr' ? 'hide' : 'header-easydex-section' }>{ translate('INDEX.DASHBOARD') }</li> <li className={ this.props.activeSection === 'jumblr' ? 'hide' : 'header-easydex-section' }>{ translate('INDEX.DASHBOARD') }</li>

4
react/src/components/dashboard/walletsNative.js

@ -29,10 +29,10 @@ class WalletsNative extends React.Component {
return ( return (
<div className="page margin-left-0"> <div className="page margin-left-0">
<div id="section-extcoin" className="padding-top-0"> <div id="section-extcoin" className="padding-top-0">
<div id="easydex-header-div" className="background-color-white" style={{ 'backgroundImage': 'url("assets/images/bg/' + this.defaultBG() + '_transparent_header_bg.png")' }}> <div id="easydex-header-div" className="background-color-white" style={{ 'backgroundImage': `url("assets/images/bg/${this.defaultBG()}_transparent_header_bg.png")` }}>
<ol className="breadcrumb"> <ol className="breadcrumb">
<li className="header-easydex-section"> <li className="header-easydex-section">
<img src={ 'assets/images/native/' + this.defaultBG() + '_header_title_logo.png' } /> <span className={'easydex-section-image ' + (this.props.ActiveCoin.coin === 'KMD' ? 'hide' : '') }>{ this.props.ActiveCoin.coin }</span> <img src={ `assets/images/native/${this.defaultBG()}_header_title_logo.png` } /> <span className={ `easydex-section-image ${(this.props.ActiveCoin.coin === 'KMD' ? 'hide' : '')}` }>{ this.props.ActiveCoin.coin }</span>
</li> </li>
</ol> </ol>
</div> </div>

56
react/src/components/dashboard/walletsNativeSend.js

@ -80,7 +80,7 @@ class WalletsNativeSend extends React.Component {
renderAddressList() { renderAddressList() {
return ( return (
<div className={ 'btn-group bootstrap-select form-control form-material showkmdwalletaddrs show-tick ' + (this.state.addressSelectorOpen ? 'open' : '') }> <div className={ `btn-group bootstrap-select form-control form-material showkmdwalletaddrs show-tick ${(this.state.addressSelectorOpen ? 'open' : '')}` }>
<button <button
type="button" type="button"
className="btn dropdown-toggle btn-info" className="btn dropdown-toggle btn-info"
@ -106,31 +106,29 @@ class WalletsNativeSend extends React.Component {
} }
renderOPIDLabel(opid) { renderOPIDLabel(opid) {
if (opid.status === 'queued') { const _satatusDef = {
return ( queued: {
<span className="label label-warning"> icon: 'warning',
<i className="icon fa-eye"></i> <span>{ translate('KMD_NATIVE.QUEUED') }</span> label: 'QUEUED'
</span> },
); executing: {
} icon: 'info',
if (opid.status === 'executing') { label: 'EXECUTING'
return ( },
<span className="label label-info"> failed: {
<i className="icon fa-eye"></i> <span>{ translate('KMD_NATIVE.EXECUTING') }</span> icon: 'danger',
</span> label: 'FAILED'
); },
success: {
icon: 'success',
label: 'SUCCESS'
} }
if (opid.status === 'failed') { };
return (
<span className="label label-danger"> if (opid.status === 'queued') {
<i className="icon fa-eye"></i> <span>{ translate('KMD_NATIVE.FAILED') }</span>
</span>
);
}
if (opid.status === 'success') {
return ( return (
<span className="label label-success"> <span className={`label label-${_satatusDef[opid.status].icon}`}>
<i className="icon fa-eye"></i> <span>{ translate('KMD_NATIVE.SUCCESS') }</span> <i className="icon fa-eye"></i> <span>{ translate(`KMD_NATIVE.${_satatusDef[opid.status].label}`) }</span>
</span> </span>
); );
} }
@ -217,14 +215,14 @@ class WalletsNativeSend extends React.Component {
handleSubmit() { handleSubmit() {
Store.dispatch(sendNativeTx(this.props.ActiveCoin.coin, this.state)); Store.dispatch(sendNativeTx(this.props.ActiveCoin.coin, this.state));
setTimeout(function() { setTimeout(() => {
Store.dispatch(getKMDOPID(null, this.props.ActiveCoin.coin)); Store.dispatch(getKMDOPID(null, this.props.ActiveCoin.coin));
}.bind(this), 1000); }, 1000);
} }
getOAdress() { getOAdress() {
resolveOpenAliasAddress(this.state.sendToOA) resolveOpenAliasAddress(this.state.sendToOA)
.then(function(json) { .then((json) => {
const reply = json.Answer; const reply = json.Answer;
if (reply && if (reply &&
@ -247,7 +245,7 @@ class WalletsNativeSend extends React.Component {
} else { } else {
Store.dispatch(triggerToaster(true, 'Couldn\'t find any addresses', 'OpenAlias', 'error')); Store.dispatch(triggerToaster(true, 'Couldn\'t find any addresses', 'OpenAlias', 'error'));
} }
}.bind(this)); });
} }
renderOASendUI() { renderOASendUI() {
@ -293,7 +291,7 @@ class WalletsNativeSend extends React.Component {
<div className="col-xlg-12 col-md-12 col-sm-12 col-xs-12"> <div className="col-xlg-12 col-md-12 col-sm-12 col-xs-12">
<div className="panel" id="projects"> <div className="panel" id="projects">
<div className="panel-heading"> <div className="panel-heading">
<h3 data-extcoin="COIN" className="panel-title"> <h3 className="panel-title">
{ translate('INDEX.SEND') } { this.props.ActiveCoin.coin } { translate('INDEX.SEND') } { this.props.ActiveCoin.coin }
</h3> </h3>
</div> </div>

2
react/src/components/dashboard/walletsNativeSyncProgress.js

@ -57,7 +57,7 @@ class WalletsNativeSyncProgress extends React.Component {
} }
} }
return(': ' + Math.floor(currentBestChain * 100 / this.props.Dashboard.progress.remoteKMDNode.blocks) + '% (blocks ' + currentBestChain + ' / ' + this.props.Dashboard.progress.remoteKMDNode.blocks + ')'); return(`: ${Math.floor(currentBestChain * 100 / this.props.Dashboard.progress.remoteKMDNode.blocks)}% (blocks ${currentBestChain} / ${this.props.Dashboard.progress.remoteKMDNode.blocks})`);
} else { } else {
return ( return (
<span id="activating-komodod-tridot">...</span> <span id="activating-komodod-tridot">...</span>

2
react/src/components/dashboard/walletsNativeTxHistory.js

@ -126,7 +126,7 @@ class WalletsNativeTxHistory extends React.Component {
<li className={ this.state.activePage === i + 1 ? 'paginate_button active' : 'paginate_button' }> <li className={ this.state.activePage === i + 1 ? 'paginate_button active' : 'paginate_button' }>
<a <a
aria-controls="kmd-tx-history-tbl" aria-controls="kmd-tx-history-tbl"
tabIndex="0" key={i + '-pagination'} tabIndex="0" key={ `${i}-pagination` }
onClick={ this.state.activePage !== (i + 1) ? () => this.updateCurrentPage(i + 1) : null }>{ i + 1 }</a> onClick={ this.state.activePage !== (i + 1) ? () => this.updateCurrentPage(i + 1) : null }>{ i + 1 }</a>
</li> </li>
); );

31
react/src/components/login/login.js

@ -14,6 +14,9 @@ import {
import Store from '../../store'; import Store from '../../store';
import { PassPhraseGenerator } from '../../util/crypto/passphrasegenerator'; import { PassPhraseGenerator } from '../../util/crypto/passphrasegenerator';
const IGUNA_ACTIVE_HANDLE_TIMEOUT = 3000;
const IGUNA_ACTIVE_COINS_TIMEOUT = 10000;
class Login extends React.Component { class Login extends React.Component {
constructor(props) { constructor(props) {
super(props); super(props);
@ -41,9 +44,9 @@ class Login extends React.Component {
openSyncOnlyModal() { openSyncOnlyModal() {
Store.dispatch(getSyncOnlyForks()); Store.dispatch(getSyncOnlyForks());
const _iguanaActiveHandle = setInterval(function() { const _iguanaActiveHandle = setInterval(() => {
Store.dispatch(getSyncOnlyForks()); Store.dispatch(getSyncOnlyForks());
}.bind(this), 3000); }, IGUNA_ACTIVE_HANDLE_TIMEOUT);
Store.dispatch(startInterval('syncOnly', _iguanaActiveHandle)); Store.dispatch(startInterval('syncOnly', _iguanaActiveHandle));
Store.dispatch(toggleSyncOnlyModal(true)); Store.dispatch(toggleSyncOnlyModal(true));
@ -67,21 +70,25 @@ class Login extends React.Component {
} }
componentWillReceiveProps(props) { componentWillReceiveProps(props) {
if (props && props.Main && props.Main.isLoggedIn) { if (props &&
props.Main &&
props.Main.isLoggedIn) {
this.setState({ this.setState({
display: false, display: false,
}); });
} }
if (props && props.Main && !props.Main.isLoggedIn) { if (props &&
props.Main &&
!props.Main.isLoggedIn) {
this.setState({ this.setState({
display: true, display: true,
}); });
if (!this.props.Interval.interval.activeCoins) { if (!this.props.Interval.interval.activeCoins) {
const _iguanaActiveCoins = setInterval(function() { const _iguanaActiveCoins = setInterval(() => {
Store.dispatch(getDexCoins()); Store.dispatch(getDexCoins());
}.bind(this), 10000); }, IGUNA_ACTIVE_COINS_TIMEOUT);
Store.dispatch(startInterval('activeCoins', _iguanaActiveCoins)); Store.dispatch(startInterval('activeCoins', _iguanaActiveCoins));
} }
@ -89,7 +96,9 @@ class Login extends React.Component {
} }
if (this.state.activeLoginSection !== 'signup') { if (this.state.activeLoginSection !== 'signup') {
if (props && props.Main && props.Main.activeCoins) { if (props &&
props.Main &&
props.Main.activeCoins) {
this.setState({ this.setState({
activeLoginSection: 'login', activeLoginSection: 'login',
}); });
@ -164,8 +173,12 @@ class Login extends React.Component {
<h2>{ translate('LOGIN.SAVED_WALLET_SEED') }</h2> <h2>{ translate('LOGIN.SAVED_WALLET_SEED') }</h2>
<div className="swal2-content display-block">{ translate('LOGIN.SEED_MAKE_SURE_BACKUP') }</div> <div className="swal2-content display-block">{ translate('LOGIN.SEED_MAKE_SURE_BACKUP') }</div>
<hr className="swal2-spacer display-block" /> <hr className="swal2-spacer display-block" />
<button className="swal2-confirm styled swal2-confirm-container" onClick={ this.execWalletCreate }>{ translate('LOGIN.YES_I_BACKUP') }</button> <button
<button className="swal2-cancel styled swal2-cancel-container" onClick={ this.toggleSeedBackupModal }>{ translate('LOGIN.CANCEL') }</button> className="swal2-confirm styled swal2-confirm-container"
onClick={ this.execWalletCreate }>{ translate('LOGIN.YES_I_BACKUP') }</button>
<button
className="swal2-cancel styled swal2-cancel-container"
onClick={ this.toggleSeedBackupModal }>{ translate('LOGIN.CANCEL') }</button>
</div> </div>
</div> </div>
); );

4
react/src/components/main/main.js

@ -8,6 +8,8 @@ import {
iguanaActiveHandle iguanaActiveHandle
} from '../../actions/actionCreators'; } from '../../actions/actionCreators';
const IGUANA_ACTIVE_HANDLE_TIMEOUT = 30000;
class Main extends React.Component { class Main extends React.Component {
constructor(props) { constructor(props) {
super(props); super(props);
@ -24,7 +26,7 @@ class Main extends React.Component {
Store.dispatch(iguanaActiveHandle()); Store.dispatch(iguanaActiveHandle());
const _iguanaActiveHandle = setInterval(function() { const _iguanaActiveHandle = setInterval(function() {
Store.dispatch(iguanaActiveHandle()); Store.dispatch(iguanaActiveHandle());
}, 30000); }, IGUANA_ACTIVE_HANDLE_TIMEOUT);
this.setState(Object.assign({}, this.state, { this.setState(Object.assign({}, this.state, {
activeHandleInterval: _iguanaActiveHandle, activeHandleInterval: _iguanaActiveHandle,

12
react/src/components/toaster/toaster-item.js

@ -1,6 +1,6 @@
import React from "react"; import React from 'react';
import {dismissToasterMessage} from "../../actions/actionCreators"; import { dismissToasterMessage } from '../../actions/actionCreators';
import Store from "../../store"; import Store from '../../store';
// each toast will be displayed for 5 seconds // each toast will be displayed for 5 seconds
const DISPLAY_LENGTH_MILLIS = 5000; const DISPLAY_LENGTH_MILLIS = 5000;
@ -10,7 +10,6 @@ const DISPLAY_LENGTH_MILLIS = 5000;
* each messages has a type, title and a content message * each messages has a type, title and a content message
*/ */
class ToasterItem extends React.Component { class ToasterItem extends React.Component {
constructor(props) { constructor(props) {
super(props); super(props);
this.state = { this.state = {
@ -60,8 +59,9 @@ class ToasterItem extends React.Component {
} }
return ( return (
<div className={ 'toast toast-' + this.state.type }> <div className={ `toast toast-${this.state.type}` }>
<button className="toast-close-button" role="button" <button
className="toast-close-button" role="button"
onClick={ () => this.dismissToast(this.state.toastId) }>× onClick={ () => this.dismissToast(this.state.toastId) }>×
</button> </button>
<div className="toast-title">{ this.state.title }</div> <div className="toast-title">{ this.state.title }</div>

40
react/src/components/toaster/toaster.js

@ -1,11 +1,8 @@
import React from "react"; import React from 'react';
import {dismissToasterMessage} from "../../actions/actionCreators"; import { dismissToasterMessage } from '../../actions/actionCreators';
import Store from "../../store"; import Store from '../../store';
import ToasterItem from "./toaster-item"; import ToasterItem from './toaster-item';
/**
* Container component used for creating multiple toasts
*/
class Toaster extends React.Component { class Toaster extends React.Component {
constructor(props) { constructor(props) {
super(props); super(props);
@ -34,15 +31,10 @@ class Toaster extends React.Component {
Store.dispatch(dismissToasterMessage(toastId)); Store.dispatch(dismissToasterMessage(toastId));
} }
// render all current toasts renderToasts() {
render() { if (this.state.toasts &&
return ( this.state.toasts.length) {
<div id="toast-container" return this.state.toasts.map((toast) => {
className="single-toast toast-bottom-right"
aria-live="polite"
role="alert">
{this.state.toasts
.map((toast) => {
// sets the toastId for all new toasts // sets the toastId for all new toasts
if (!toast.toastId) { if (!toast.toastId) {
toast.toastId = this.toastId++; toast.toastId = this.toastId++;
@ -51,7 +43,21 @@ class Toaster extends React.Component {
return ( return (
<ToasterItem key={ toast.toastId } {...toast} /> <ToasterItem key={ toast.toastId } {...toast} />
); );
})} });
} else {
return null;
}
}
// render all current toasts
render() {
return (
<div
id="toast-container"
className="single-toast toast-bottom-right"
aria-live="polite"
role="alert">
{ this.renderToasts() }
</div> </div>
); );
} }

13
react/src/styles/index.scss

@ -502,16 +502,3 @@ input:checked + .slider:before {
#app { #app {
height: 100%; height: 100%;
} }
/*.toaster .single-toast:nth-child(0) {
bottom: 12px;
}
.toaster .single-toast:nth-child(1) {
bottom: 102px;
}
.toaster .single-toast:nth-child(2) {
bottom: 192px;
}
.toaster .single-toast:nth-child(3) {
bottom: 282px;
}*/

316
react/src/util/coinHelper.js

@ -0,0 +1,316 @@
export function getCoinTitle(coin) {
let coinlogo,
coinname;
switch (coin) {
case 'BTC':
coinlogo = 'bitcoin';
coinname = 'Bitcoin';
break;
case 'BTCD':
coinlogo = 'bitcoindark';
coinname = 'BitcoinDark';
break;
case 'LTC':
coinlogo = 'litecoin';
coinname = 'Litecoin';
break;
case 'VPN':
coinlogo = 'vpncoin';
coinname = 'VPNcoin';
break;
case 'SYS':
coinlogo = 'syscoin';
coinname = 'Syscoin';
break;
case 'ZEC':
coinlogo = 'zcash';
coinname = 'Zcash';
break;
case 'NMC':
coinlogo = 'namecoin';
coinname = 'Namecoin';
break;
case 'DEX':
coinlogo = 'dex';
coinname = 'InstantDEX';
break;
case 'DOGE':
coinlogo = 'dogecoin';
coinname = 'Dogecoin';
break;
case 'DGB':
coinlogo = 'digibyte';
coinname = 'Digibyte';
break;
case 'MZC':
coinlogo = 'mazacoin';
coinname = 'Mazacoin';
break;
case 'UNO':
coinlogo = 'unobtanium';
coinname = 'Unobtanium';
break;
case 'ZET':
coinlogo = 'zetacoin';
coinname = 'Zetacoin';
break;
case 'KMD':
coinlogo = 'komodo';
coinname = 'Komodo';
break;
case 'BTM':
coinlogo = 'bitmark';
coinname = 'Bitmark';
break;
case 'CARB':
coinlogo = 'carboncoin';
coinname = 'Carboncoin';
break;
case 'ANC':
coinlogo = 'anoncoin';
coinname = 'AnonCoin';
break;
case 'FRK':
coinlogo = 'franko';
coinname = 'Franko';
break;
case 'GAME':
coinlogo = 'GAME';
coinname = 'GameCredits';
break;
case 'SUPERNET':
coinlogo = 'SUPERNET';
coinname = 'SUPERNET';
break;
case 'REVS':
coinlogo = 'REVS';
coinname = 'REVS';
break;
case 'WLC':
coinlogo = 'WLC';
coinname = 'WIRELESS';
break;
case 'PANGEA':
coinlogo = 'PANGEA';
coinname = 'PANGEA';
break;
case 'JUMBLR':
coinlogo = 'JUMBLR';
coinname = 'JUMBLR';
break;
case 'BET':
coinlogo = 'BET';
coinname = 'BET';
break;
case 'CRYPTO':
coinlogo = 'CRYPTO';
coinname = 'CRYPTO';
break;
case 'HODL':
coinlogo = 'HODL';
coinname = 'HODL';
break;
case 'SHARK':
coinlogo = 'SHARK';
coinname = 'SHARK';
break;
case 'BOTS':
coinlogo = 'BOTS';
coinname = 'BOTS';
break;
case 'MGW':
coinlogo = 'MGW';
coinname = 'MultiGateway';
break;
case 'MVP':
coinlogo = 'MVP';
coinname = 'MVP Lineup';
break;
case 'KV':
coinlogo = 'KV';
coinname = 'KV';
break;
case 'CEAL':
coinlogo = 'CEAL';
coinname = 'CEAL NET';
break;
case 'MESH':
coinlogo = 'MESH';
coinname = 'SpaceMesh';
break;
case 'USD':
coinlogo = 'usd';
coinname = 'US Dollar';
break;
case 'RON':
coinlogo = 'RON';
coinname = 'Romanian Leu';
break;
case 'EUR':
coinlogo = 'EUR';
coinname = 'Euro';
break;
case 'JPY':
coinlogo = 'JPY';
coinname = 'Japanese Yen';
break;
case 'GBP':
coinlogo = 'GBP';
coinname = 'British Pound';
break;
case 'AUD':
coinlogo = 'AUD';
coinname = 'Australian Dollar';
break;
case 'CAD':
coinlogo = 'CAD';
coinname = 'Canadian Dollar';
break;
case 'CHF':
coinlogo = 'CHF';
coinname = 'Swiss Franc';
break;
case 'NZD':
coinlogo = 'NZD';
coinname = 'New Zealand Dollar';
break;
case 'CNY':
coinlogo = 'CNY';
coinname = 'Chinese Yuan';
break;
case 'RUB':
coinlogo = 'RUB';
coinname = 'Russian Ruble';
break;
case 'MXN':
coinlogo = 'MXN';
coinname = 'Mexican peso';
break;
case 'BRL':
coinlogo = 'BRL';
coinname = 'Brazilian Real';
break;
case 'INR':
coinlogo = 'INR';
coinname = 'Indian Rupee';
break;
case 'HKD':
coinlogo = 'HKD';
coinname = 'Hong Kong Dollar';
break;
case 'TRY':
coinlogo = 'TRY';
coinname = 'Turkish Lira';
break;
case 'ZAR':
coinlogo = 'ZAR';
coinname = 'South African Rand';
break;
case 'PLN':
coinlogo = 'PLN';
coinname = 'Polish Zloty';
break;
case 'NOK':
coinlogo = 'NOK';
coinname = 'Norwegian Krone';
break;
case 'SEK':
coinlogo = 'SEK';
coinname = 'Swedish Krona';
break;
case 'DKK':
coinlogo = 'DKK';
coinname = 'Danish Krone';
break;
case 'CZK':
coinlogo = 'CZK';
coinname = 'Czech Koruna';
break;
case 'HUF':
coinlogo = 'HUF';
coinname = 'Hungarian Forint';
break;
case 'ILS':
coinlogo = 'ILS';
coinname = 'Israeli Shekel';
break;
case 'KRW':
coinlogo = 'KRW';
coinname = 'Korean Won';
break;
case 'MYR':
coinlogo = 'MYR';
coinname = 'Malaysian Ringgit';
break;
case 'PHP':
coinlogo = 'PHP';
coinname = 'Philippine Peso';
break;
case 'SGD':
coinlogo = 'SGD';
coinname = 'Singapore Dollar';
break;
case 'THB':
coinlogo = 'THB';
coinname = 'Thai Baht';
break;
case 'BGN':
coinlogo = 'BGN';
coinname = 'Bulgarian Lev';
break;
case 'IDR':
coinlogo = 'IDR';
coinname = 'Indonesian Rupiah';
break;
case 'HRK':
coinlogo = 'HRK';
coinname = 'Croatian Kuna';
break;
}
return {
'logo': coinlogo,
'name': coinname
};
}
export function getModeInfo(mode) {
let modecode,
modetip,
modecolor;
switch (mode) {
case 'native':
modecode = 'Native';
modetip = 'Native';
modecolor = 'primary';
break;
case 'basilisk':
modecode = 'Basilisk';
modetip = 'Basilisk';
modecolor = 'info';
break;
case 'full':
modecode = 'Full';
modetip = 'Full';
modecolor = 'success';
break;
case 'virtual':
modecode = 'Virtual';
modetip = 'Virtual';
modecolor = 'danger';
break;
case 'notarychains':
modecode = 'Notarychains';
modetip = 'Notarychains';
modecolor = 'dark';
break;
}
return {
'code': modecode,
'tip': modetip,
'color': modecolor
};
}
Loading…
Cancel
Save